Чистые регулярные выражения Python
Есть ли более чистый способ записи длинных шаблонов регулярных выражений в python? Я видел этот подход где-то, но регулярное выражение в python не позволяет списки.
patterns = [
re.compile(r'<!--([^->]|(-+[^->])|(-?>))*-{2,}>'),
re.compile(r'\n+|\s{2}')
]
Ответы
Ответ 1
Вы можете использовать подробный режим для записи более читаемых регулярных выражений. В этом режиме:
- Пробелы внутри шаблона игнорируются, за исключением случаев, когда в классе символов или предшествует обратная косая черта без возврата.
- Когда строка содержит "#" ни в символьном классе, ни в предыдущей строке, а в конце строки игнорируются все символы из крайних левых, такие как "#" в конце строки.
Следующие два утверждения эквивалентны:
a = re.compile(r"""\d + # the integral part
\. # the decimal point
\d * # some fractional digits""", re.X)
b = re.compile(r"\d+\.\d*")
(взято из документации подробный режим)
Ответ 2
Хотя предложение @Ayman о re.VERBOSE
является лучшей идеей, если все, что вы хотите, это то, что вы показываете, просто выполните:
patterns = re.compile(
r'<!--([^->]|(-+[^->])|(-?>))*-{2,}>'
r'\n+|\s{2}'
)
и автоматическая конкатенация Python смежных строковых литералов (как и C, btw) сделает все остальное: -).
Ответ 3
Вы можете использовать комментарии в regex's, что делает их более читаемыми. Пример из http://gnosis.cx/publish/programming/regular_expressions.html:
/ # identify URLs within a text file
[^="] # do not match URLs in IMG tags like:
# <img src="http://mysite.com/mypic.png">
http|ftp|gopher # make sure we find a resource type
:\/\/ # ...needs to be followed by colon-slash-slash
[^ \n\r]+ # stuff other than space, newline, tab is in URL
(?=[\s\.,]) # assert: followed by whitespace/period/comma
/