regex Python:正则表达式模式在拆分为多行后失败

u3r8eeie  于 2023-03-20  发布在  Python
关注(0)|答案(2)|浏览(125)

我有一个正则表达式模式,如果我用一行来写它,它就能很好地工作。
例如,如果我执行以下操作,模式就会工作:

  1. MAIN_TREE_START_STRING_PATTERN = (
  2. r"\*{3}\s+\bTotal Things\b:\s+(?P<number_of_things>\d+)"
  3. )
  4. compiled_pattern = re.compile(MAIN_TREE_START_STRING_PATTERN, flags=re.X)
  5. match = compiled_pattern.match(string="*** Total Things: 348, abcdefghi ***")
  6. if match:
  7. print("Success")
  8. else:
  9. print("Failed")

但是如果我将regex模式更改为多行字符串,并使用VERBOSE标志,它就不起作用了。

  1. MAIN_TREE_START_STRING_PATTERN = r"""
  2. \*{3}\s+\bTotal Things\b:\s+
  3. (?P<number_of_things>\d+)
  4. """
  5. compiled_pattern = re.compile(MAIN_TREE_START_STRING_PATTERN)
  6. match = compiled_pattern.match(string="*** Total Things: 348, abcdefghi ***")
  7. if match:
  8. print("Success")
  9. else:
  10. print("Failed")

我不确定在多行模式声明期间我做错了什么。

hwazgwia

hwazgwia1#

您没有使用re.VERBOSE,在这种情况下必须显式匹配空格

  1. import re
  2. MAIN_TREE_START_STRING_PATTERN = r"""
  3. \*{3}\s+\bTotal[ ]Things\b:\s+
  4. (?P<number_of_things>\d+)
  5. """
  6. compiled_pattern = re.compile(MAIN_TREE_START_STRING_PATTERN, re.VERBOSE)
  7. match = compiled_pattern.match(string="*** Total Things: 348, abcdefghi ***")
  8. if match:
  9. print("Success")
  10. else:
  11. print("Failed")
ego6inou

ego6inou2#

多行字符串常量中的换行符也是结果字符串的一部分。额外的换行符很可能是正则表达式不再起作用的原因。
要去掉换行符,只需定义多个字符串,Python会自动将它们连接起来:

  1. MAIN_TREE_START_STRING_PATTERN = (
  2. r"\*{3}\s+\bTotal Things\b:\s+"
  3. r"(?P<number_of_things>\d+)"
  4. )

相关问题