我有以下正则表达式:
res = re.finditer(r'(?:\w+[ \t,]+){0,4}my car',txt,re.IGNORECASE|re.MULTILINE)
for item in res:
print(item.group())
当我使用带有以下字符串的正则表达式时:
"我的房子漆成白色,我的车是红色的。 一匹马在路上跑得很快,我慢慢开车。"
我得到以下结果:
我的问题是应该适用于整个群体的量词{0,4}
。该组收集带有表达式\w+
的单词和带有[]的一些分隔符号。量词是否仅适用于"单词"由\w+
定义?在结果中我得到4个单词加空格和逗号。我不清楚。
答案 0 :(得分:1)
所以,这就是发生的事情。您正在使用?:创建一个非捕获组,它收集一个或多个“单词”,后跟一个[\ t \ t,](空格,制表符或逗号),匹配前面的一个或多个。 {0,4}匹配非捕获组的0-4。因此它会查看单词“my car”并捕获它前面的4个单词,因为它们中的所有4个都匹配\ w +和,并且空格被您指定的字符集吃掉。
更简洁地分开
(?: -- Non capturing group
\w+ Grab all words
[ \t,]+ -- Grab all spaces, comma, or tab characters
) -- End capture group
{0,4} -- Match the previous capture group 0-4 times
my car -- Based off where you find the words "my car"
因此,在“my car”出现之前,这将匹配0-4字/空格/逗号/标签
这是按照书面工作