我有这样的弦:
strings = [
'title : Booking things author J smith',
'title : Unbe God author: K. sweet'
]
字符串在“title”和“title”之间以及“author”和author之间可能有冒号,也可能没有。但它们总是有“标题”和“作者”两个词。在
我想像这样捕获标题:Booking things
,和{
我有两个正则表达式:
^{pr2}$结果是:
规则1:
import re
re.findall(regex1, string, flags=re.I)
['title : Booking things ']
规则2:
import re
re.findall(regex2, string, flags=re.I)
[' : Booking things ']
为了不捕获这个词,{cd5}我想不去捕捉这个词。如何告诉它在不使用lookbehind时不捕获单词title
?在
在第二个例子中,regex2
,我确实使用了一个look-behind,但是随后我遇到了一个类似的问题。我如何告诉它不要捕获:
,但仍然要在后面寻找单词title
?我也避免了这样一个事实:向后看必须是固定宽度的。在
非捕获组仍然使用文本。它们只是匹配(文本被抓取并添加到匹配结果中),而不是捕获(=将匹配值的一部分存储在特定编号或命名的缓冲区中)。若要检查是否存在/不存在,仅存在查找区域(或定位点)。在
很明显,您希望从匹配项中丢弃前缀
title :
。不能使用lookbehind,因为在Pythonre
模块中不允许使用可变宽度的lookbehind(其中包含限定符的模块)。一个常见的解决方法是围绕需要获得的模式使用捕获组。在您可以围绕
[\w\s]+
子模式设置一个捕获组,以将该值捕获到组1中:sample demo的输出:
^{pr2}$请注意,如果您想去掉捕获文本中的尾随空格,请使用稍微调整的regex:
见regex demo。
?
使[\w\s]+
子模式变得懒惰,并将在一个或多个空白(\s+
)之前匹配尽可能少的字符,这些空格(\s+
)正好位于一个文本字符序列author
之前。在相关问题 更多 >
编程相关推荐