【问题标题】:regex - find subsequent lines after a match. Work with pythex but not in script (with python)正则表达式 - 在匹配后查找后续行。使用 pythex 但不在脚本中(使用 python)
【发布时间】:2025-12-21 23:45:15
【问题描述】:

我收到以下文字

书名:神曲,完整 天堂、炼狱和地狱的异象

我正在使用这个正则表达式来获取后续行

(?<=Title:)[.|\n|\W|\w]*

它在像https://pythex.org/这样的正则表达式在线构建器中运行良好

但是,我正在创建一个如下所示的正则表达式对象

 re.compile(r'(?<=Title:)[.|\n|\W|\w]*', re.IGNORECASE) 

当我运行它时,我得到了

File "./script1_c.py", line 33, in <module>
title = re.search(title_search, doc).group('title')
IndexError: no such group

我做错了什么?我应该将IGNORECASE 更改为MULTILINE 吗? TIA

【问题讨论】:

  • 您没有任何命名组 - 它匹配,但没有指定要提取的内容。试试r'(?&lt;=Title:)(?P&lt;title&gt;[.|\n|\W|\w]*)'(见here)。
  • 这很好,乔恩。谢谢 !你为什么不把它作为一个解决方案?

标签: python python-2.7


【解决方案1】:

您的模式中目前没有任何组,无论是否命名,因此您可以返回的唯一组是0,即整个匹配项。

使用数字组来解决这个问题:

title_search = re.compile(r'(?<=Title:)([.\n\W\w]*)', re.IGNORECASE) 
title = re.search(title_search, data).group(1)

或命名组:

title_search = re.compile(r'(?<=Title:)(?P<title>[.\n\W\w]*)', re.IGNORECASE) 
title = re.search(title_search, data).group('title')

注意,您的字符集中不需要| 符号。管道符号用于表示两种模式之间的选择,但仅限于字符集之外。

最后,您可以使用re.DOTALL 来简化您的模式:

title_search = re.compile(r'(?<=Title:)(?P<title>.*)',re.IGNORECASE | re.DOTALL) 

【讨论】: