2010-08-22 19 views
16

ich finden müssen, zu verarbeiten und entfernen (eines nach der anderen), um alle Teile, die eine ziemlich lange Regex:Python Regex und ersetzen

# p is a compiled regex 
# s is a string 
while 1: 
    m = p.match(s) 
    if m is None: 
     break 
    process(m.group(0)) #do something with the matched pattern 
    s = re.sub(m.group(0), '', s) #remove it from string s 

Der obige Code ist nicht gut aus 2 Gründen:

  1. Es funktioniert nicht, wenn m.group (0) zufällig Regex-Sonderzeichen (wie *, +, etc.) enthält.

  2. Es fühlt sich an, als ob ich die Arbeit dupliziere: zuerst suche ich die Zeichenkette nach dem regulären Ausdruck, und dann muss ich irgendwie danach suchen, um es wieder zu entfernen.

Was ist ein guter Weg, dies zu tun?

Antwort

19

Die re.sub Funktion kann eine Funktion als Argument nehmen, damit Sie die Ersatz-und Verarbeitungsschritte kombinieren können, wenn Sie wollen:

# p is a compiled regex 
# s is a string 
def process_match(m): 
    # Process the match here. 
    return '' 

s = p.sub(process_match, s) 
+0

Danke, darüber vergessen .. – max

+0

Ah und ich herausgefunden, was zu tun wenn ich eine Zeichenfolge ersetzen möchte, die Regex-Symbole enthalten kann .. re.escape (s) kümmert sich darum. – max

+0

Entschuldigung aber was ist p? – CodyBugstein