Регулярное выражение: Искать строку между двумя слэшами, если сама строка содержит экранированные слэши

Я пытаюсь построить регулярное выражение, которое сопоставляет регулярные выражения между двумя прямыми слэшами. Моя основная проблема заключается в том, что регулярные выражения сами по себе могут содержать прямые косые черты, экранированные обратным слешем. Я пытаюсь отфильтровать их с помощью отрицательного утверждения lookbehind (совпадает только с закрывающей косой чертой, если в текущей позиции нет обратной косой черты), однако теперь у меня возникает проблема, что я не получаю совпадения, если само регулярное выражение заканчивается обратной косой чертой.

тестовая программа:

#!/usr/bin/python
import re
teststrings=[
     """/hello world/""", 
     """/string with foreslash here \/ and here\//""",
     """/this one ends with backlash\\\\/"""]

patt="""^\/(?P<pattern>.*)(?<!\\\\)\/$"""

for t in teststrings:
    m=re.match(patt,t)
    if m!=None:
        print t,' => MATCH'
    else:
        print t," => NO MATCH"

вывод:

/hello world/  => MATCH
/string with foreslash here \/ and here\//  => MATCH
/this one ends with backlash\\/  => NO MATCH

Как я могу изменить утверждение, чтобы оно выполнялось только если в текущей позиции есть одна обратная косая черта, но не две?

Или есть лучший способ извлечь регекс? (Обратите внимание, в реальном файле, который я пытаюсь разобрать, строки содержат больше, чем просто регекс. Я не могу просто искать первый и последний слеш в строке и получить все, что между ними.)

6
задан Gryphius 12 December 2011 в 11:50
поделиться