【问题标题】:How do I do line continuation with a long regex? [duplicate]如何使用长正则表达式进行行延续? [复制]
【发布时间】:2016-01-17 14:56:08
【问题描述】:

我有一个很长的正则表达式,我想继续到下一行,但我尝试过的所有操作都会给我一个 EOL 或破坏正则表达式。我已经在括号内续写了一次,并阅读了How can I do a line break (line continuation)? 等内容。

工作,但仍然太长:

REGEX = re.compile(
            r'\d\s+\d+\s+([A-Z0-9-]+)\s+([0-9]+.\d\(\d\)[A-Z0-9]+)\s+([a-zA-Z\d-]+)')

错误:

REGEX = re.compile(
            r'\d\s+\d+\s+([A-Z0-9-]+)\s+([0-9]+.\d\(\d\)[A-Z0-9]+
            )\s+([a-zA-Z\d-]+)')

SyntaxError: EOL while scanning string literal


REGEX = re.compile(
            r'\d\s+\d+\s+([A-Z0-9-]+)\s+([0-9]+.\d\(\d\
                )[A-Z0-9]+)\s+([a-zA-Z\d-]+)')
    
sre_constants.error: unbalanced parenthesis


REGEX = re.compile(
            r'\d\s+\d+\s+([A-Z0-9-]+)\s+( \
            [0-9]+.\d\(\d\)[A-Z0-9]+)\s+([a-zA-Z\d-]+)')

regex no longer works


REGEX = (re.compile(
            r'\d\s+\d+\s+([A-Z0-9-]+)\s+(
            [0-9]+.\d\(\d\)[A-Z0-9]+)\s+([a-zA-Z\d-]+)'))

SyntaxError: EOL while scanning string literal

我已经能够缩短我的正则表达式,因此这不再是一个问题,但我现在很想知道如何使用长正则表达式进行行延续?

【问题讨论】:

  • 您的搜索查询的问题在于您认为这是继续一行,而您找到的答案是关于“继续一个逻辑行”,这是不是你需要的。获得所需答案的术语是“继续多行 string。”
  • 我想我认为正则表达式与常规 Python 字符串不同。尽管 re.VERBOSE 答案是特定于正则表达式的,而不是使正则表达式成为多行字符串。
  • 正则表达式和您通常使用的字符串之间的唯一区别是r 表示原始字符串。它只是为了方便。您可以将r 与不用作正则表达式的字符串一起使用(例如r'C:\Users'),并且您可以在没有r 的情况下创建正则表达式字符串(例如'[0-9]{3}-[0-9]{3}-[0-9]{4}')。

标签: python regex


【解决方案1】:

尝试:

regex = re.compile(
    r'\d\s+\d+\s+([A-Z0-9-]+)\s+('
    r'[0-9]+.\d\(\d\)[A-Z0-9]+)\s+([a-zA-Z\d-]+)'
)

【讨论】:

    【解决方案2】:

    您可以在多行中使用多个字符串,Python 会在发送到re.compile 之前将它们连接起来(只要多个字符串在() 之间)。示例 -

    REGEX = re.compile(r"\d\s+\d+\s+([A-Z0-9-]+)\s+([0-9]+.\d\(\d\)"
                       r"[A-Z0-9]+)\s+([a-zA-Z\d-]+)")
    

    【讨论】:

      【解决方案3】:

      如果您使用re.VERBOSE 标志,您可以根据需要拆分正则表达式以使其更具可读性:

      pattern = r"""
          \d\s+
          \d+\s+
          ([A-Z0-9-]+)\s+
          ([0-9]+.\d\(\d\)[A-Z0-9]+)\s+
          ([a-zA-Z\d-]+)"""
      
      REGEX = re.compile(pattern, re.VERBOSE)
      

      优秀的“Dive Into Python”一书中解释了这种方法。
      请参阅“详细正则表达式”。

      【讨论】:

      • 我喜欢这样将其保留在正则表达式中,而不是使用连接。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-09
      • 1970-01-01
      • 2017-01-24
      • 2012-05-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多