Чистые регулярные выражения Python - PullRequest
15 голосов
/ 06 июня 2009

Есть ли более чистый способ написания длинных шаблонов регулярных выражений в python? Я где-то видел такой подход, но регулярные выражения в python не допускают списки.

patterns = [
    re.compile(r'<!--([^->]|(-+[^->])|(-?>))*-{2,}>'),
    re.compile(r'\n+|\s{2}')
]

Ответы [ 3 ]

26 голосов
/ 06 июня 2009

Вы можете использовать подробный режим, чтобы писать более читаемые регулярные выражения. В этом режиме:

  • Пробелы в шаблоне игнорируются, кроме случаев, когда они находятся в классе символов или им предшествует неэкранированная обратная косая черта.
  • Когда строка содержит символ «#» ни в классе символов, ни перед ним не стоит обратная косая черта без экранирования, все символы слева от «#» до конца строки игнорируются.

Следующие два утверждения эквивалентны:

a = re.compile(r"""\d +  # the integral part
                   \.    # the decimal point
                   \d *  # some fractional digits""", re.X)

b = re.compile(r"\d+\.\d*")

(взято из документации подробный режим )

13 голосов
/ 06 июня 2009

Хотя предложение @ Ayman о re.VERBOSE является лучшей идеей, если все, что вы хотите, это то, что вы показываете, просто сделайте:

patterns = re.compile(
        r'<!--([^->]|(-+[^->])|(-?>))*-{2,}>'
        r'\n+|\s{2}'
)

и автоматическая конкатенация Python смежных строковых литералов (во многом как C, btw) сделает все остальное; -).

2 голосов
/ 06 июня 2009

Вы можете использовать комментарии в регулярных выражениях, которые делают их намного более читабельными. Взяв пример из 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 
/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...