在正则表达式上使用re.VERBOSE

时间:2018-04-21 01:48:00

标签: python regex

我将如何采用以下正则表达式:

re.compile(r'(\'?(("(\"|[^"])*")|^#.*\n|;.*\n|\(|\)|-?[0-9]+(\.[0-9]+)?|[a-zA-Z-#][a-zA-Z0-9.+-/\!]*))|\'.*')

并将其写入多行?

无论出于何种原因,我尝试使用re.VERBOSE似乎都会改变表达式的值。

2 个答案:

答案 0 :(得分:0)

如果你把两个字符串放在一起,它们之间只有空格,那么python解释器会将它们连接起来

re.compile(r'(\'?(("(\"|[^"])")|^#.\n|;.\n|(|)|-?[0-9]+(.[0-9]+)?|'
           r'[a-zA-Z-#][a-zA-Z0-9.+-/!]))|\'.*')

答案 1 :(得分:0)

将正则表达式转换为re.VERBOSE模式时,请确保:

  • 空格被转义或替换为等效的:\s[ ]'\ '(由于SO格式化,我必须将''放在此处。 使用re.VERBOSE忽略所有普通空格。
  • 哈希#以相同的方式进行转义或替换:\#等。 哈希用re.VERBOSE作为评论方式。

然后你可以使用python的多行字符串重写你的正则表达式:

import re
re.compile(r'''
    (\'?(("(\"|[^"])*")
         |^\#.*\n
         |;.*\n
         |\(
         |\)
         |-?[0-9]+(\.[0-9]+)?
         |[a-zA-Z-#][a-zA-Z0-9.+-/\!]*
        )
    )
    |\'.*
    ''', re.VERBOSE)