python - 在 Python 中搜索两个复杂的正则表达式模式之一而不创建子匹配

标签 python regex

我正在解析一些由不同人转录的电视剧集,这意味着我需要搜索各种格式。例如,新场景可以通过以下两种方式之一指示:

[咖啡店]

INT。咖啡厅 - 夜晚

现在,我将其与 Python 中的以下正则表达式进行匹配:

re.findall("(^\[(.+?)\]$)|(^[INTEXT]{3}\. .+?$)", text)

其中“text”是整个脚本的文本(因此使用findall)。它总是出现在自己的行上,因此 ^$

这给了我类似的东西:(无,无,“INT.咖啡店 - 夜晚”) 例如。

我的问题:如何构建一个正则表达式来使用 | 表示法搜索两个复杂模式之一,而无需创建您并不真正想要的子匹配?或者有更好的办法吗?

非常感谢。

更新:我忽略了非捕获组的想法。我可以通过以下方式完成我想要的事情:

"(?:^\[.+?\]$)|(?:^[INTEX]{3}\. .+?$)"

然而,这提出了一个新问题。我实际上并不想要场景中的括号或 INT/EXT,只想要位置。我认为我可以在非捕获组中使用实际组,但我仍然得到其他表达式的空白匹配,如下所示:

import re

pattern = "(?:^\[(.+?)\]$)|(?:^[INTEX]{3}\. (.+?)$)"

examples = [                                                                                                                                                                     
    "[coffee shop]",                                                                                                                                                                 
    "INT. COFFEE SHOP - DAY",                                                                                                                                                        
    "EXT. FIELD - NIGHT",                                                                                                                                                            
    "[Hugh's aparment]"
]

for example in examples:
    print re.findall(pattern, example)


'''
[('coffee shop', '')]
[('', 'COFFEE SHOP - DAY')]
[('', 'FIELD - NIGHT')]
[("Hugh's aparment", '')]
'''

我可以join()它们,但是有更好的方法吗?

最佳答案

根据您提供的有限示例,如何对括号使用断言:

re.findall("((?<=^\[)[^[\]]+(?=\]$)|^[INTEXT]{3}\. .+?$)", text)

关于python - 在 Python 中搜索两个复杂的正则表达式模式之一而不创建子匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15587033/

相关文章:

python - 用 C 解释来自 Modbus ASCII 的数据

Python 有序字典到常规字典

python - 如何在numpy中获取指定数组的欧几里得距离?

php - 给定一组格式为 {FIXED PREFIX}/{NUMERIC ID}/... 的 URL,如何检索具有最高 {NUMERIC ID} 的 URL?

regex - 开始使用正则表达式

python - 属性错误 : type object 'datetime.time' has no attribute 'mktime'

python - 在我的爬虫中使用 lambda 函数时遇到问题

java - 创建java正则表达式来获取href链接

java - 如何允许现有正则表达式中的特殊字符集?

java - 从 JAVA 中的字符串中提取 CSS 样式