Я пытаюсь построить регулярное выражение, которое сопоставляет регулярные выражения между двумя прямыми слэшами. Моя основная проблема заключается в том, что регулярные выражения сами по себе могут содержать прямые косые черты, экранированные обратным слешем. Я пытаюсь отфильтровать их с помощью отрицательного утверждения 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
Как я могу изменить утверждение, чтобы оно выполнялось только если в текущей позиции есть одна обратная косая черта, но не две?
Или есть лучший способ извлечь регекс? (Обратите внимание, в реальном файле, который я пытаюсь разобрать, строки содержат больше, чем просто регекс. Я не могу просто искать первый и последний слеш в строке и получить все, что между ними.)