2014-06-09 7 views
5

Unterstützt Python bedingte Struktur in Regex?Unterstützt Python bedingte Struktur in Regex?

  1. Wenn ja, warum kann ich nicht habe folgenden (mit Look-Ahead in dem, wenn Teil) richtig? Wie kann Python es unterstützen?

    >>> p = re.compile(r'(?(?=regex)then|else)') 
    Traceback (most recent call last): 
        File "<stdin>", line 1, in <module> 
        File "/usr/lib/python2.7/re.py", line 190, in compile 
        return _compile(pattern, flags) 
        File "/usr/lib/python2.7/re.py", line 242, in _compile 
        raise error, v # invalid expression 
    sre_constants.error: bad character in group name 
    
  2. Mit Rückreferenzierung als wenn ein Teil funktioniert, aber:

    >>> p = re.compile(r'(expr)?(?(1)then|else)') 
    

http://www.regular-expressions.info/conditional.html sagt

Conditionals vom Motor JGsoft unterstützt werden, Perl, PCRE, Python, und das .NET-Framework.

Was ist die nächste Lösung, um Bedingungen in Regex zu verwenden?

Mein Python ist 2.7.3. Ich weiß nicht, wie man die Version re Modul prüft (wie kann ich?). Vielen Dank.

+0

wahrscheinlich nicht, es funktioniert nicht in der neuesten Python 3.4 – simonzack

Antwort

6

Nach der Dokumentation, die Sie verwiesen:

Python conditionals mit einer nummerierten oder benannte einfangende Gruppe unterstützt. Python unterstützt keine Bedingungen mit Lookaround, obwohl Python Lookaround-Bedingungen von außen unterstützt. Anstelle einer bedingten wie (?(?=regex)then|else) können Sie zwei gegensätzliche Lookarounds wechseln: (?=regex)then|(?!regex)else).

+0

danke. Was sind einige beliebte Sprachen, die die Verwendung von Lookaround im if-Teil unterstützen? – Tim

+0

@Tim, ich habe keine absolute Antwort dafür. Zumindest weiß ich, dass Perl es unterstützt: http://perldoc.perl.org/perlre.html#(%3f(condition)ye-pattern%7cno-pattern) – falsetru

+0

Danke, ich bin auf der Suche nach einem Online-Tester, der kann Testen Sie die Bedingung mit Lookaround als If-Teil. Ich habe es versucht, aber ich habe noch keinen gefunden. – Tim