Lange Zeit/erste Zeit.Regex Ersatz für Streifen()
Ich bin ein Apotheker von Beruf durch die Bewegungen des Unterrichtens selbst, wie man in einer Vielzahl von Sprachen, die mir für Dinge wie Aufgabenautomatisierung bei der Arbeit, aber hauptsächlich Python 3.x nützlich sind. Ich arbeite durch das eBook und finde es großartig.
Ich versuche eine der Übungsfragen aus Kapitel 7 zu vervollständigen: "Schreiben Sie eine Funktion, die eine Zeichenkette nimmt und dasselbe wie die strip() - Zeichenkette tut. Wenn keine anderen Argumente als die übergeben werden string to strip, Leerzeichen am Anfang und am Ende der Zeichenfolge werden entfernt. Andernfalls werden die im zweiten Argument der Funktion angegebenen Zeichen aus der Zeichenfolge entfernt. "
Ich bin für die Situation fest, wenn die Zeichen, die ich entfernen möchte, in der Zeichenfolge angezeigt werden möchte ich sie aus z. 'Ssstestsss'.strip (n)
#!python3
import re
respecchar = ['?', '*', '+', '{', '}', '.', '\\', '^', '$', '[', ']']
def regexstrip(string, _strip):
if _strip == '' or _strip == ' ':
_strip = r'\s'
elif _strip in respecchar:
_strip = r'\'+_strip'
print(_strip) #just for troubleshooting
re_strip = re.compile('^'+_strip+'*(.+)'+_strip+'*$')
print(re_strip) #just for troubleshooting
mstring = re_strip.search(string)
print(mstring) #just for troubleshooting
stripped = mstring.group(1)
print(stripped)
Wie es gezeigt wird, ist es auf läuft (' ssstestsss', 's') nachgeben 'testsss' wie. + Bekommt alles davon und das * läßt es Ignoriere das letzte 'sss'. Wenn ich das finale * zu a + ändere, verbessert es sich nur ein bisschen, um 'testss' zu ergeben. Wenn ich die Erfassungsgruppe nicht gierig mache (dh (. +)?) Bekomme ich immer noch 'testsss' und wenn ich das Zeichen aus der Zeichenklasse für die Erfassungsgruppe ausschließe, entferne den Endstring-Anker (zB re.compile('^'+_strip+'*([^'+_strip+'.]+)'+_strip+'*')
Ich bekomme ich ‚te‘ und wenn nicht das Ende String Anker entfernen sie dann es offensichtlich Fehler.
Apologies für die ausführliche und schwafeln-y Frage.
ich den gesamten Code absichtlich enthalten (in Arbeit), wie ich Ich lerne nur, also merke ich, dass mein Code wahrscheinlich ziemlich ineffizient ist, wenn Sie also andere Bereiche sehen, in denen ich meinen Code verbessern kann, lassen Sie es mich wissen Ich weiß, dass es für diesen Code keine praktische Anwendung gibt, aber ich bin es Durchgehen als Lernübung.
Ich hoffe, ich habe diese Frage angemessen gestellt und bei meinen Recherchen nichts verpasst.
Grüße
Lobsta
Sie haben für die ausgeblendeten Symbole keine Zeichenklasse verwendet. Außerdem solltest du 're.escape' verwenden, um spezielle Zeichen zu vermeiden. –
'(. +)?' Ist nicht dasselbe wie '(. +?)'. – Blckknght