无法捕获所需的小组并踢出其余的小组

时间:2018-07-08 21:35:56

标签: python regex python-3.x

我在正则表达式中编写了一个模式,仅捕获456jkljkl456456jkl,{{1}中的这两个jkl456456但是,当我执行脚本时,它会得到所有四个脚本。我要去哪里错了?

我的脚本:

jkl

我得到:

import re

content = """456jkl, 456, jkl, jkl456"""

item = [item for item in re.findall('((?:jkl|456)+)',content)]
print(item)

预期输出:

['456jkl', '456', 'jkl', 'jkl456']

2 个答案:

答案 0 :(得分:1)

您的正则表达式当前匹配任何一个模式,但是您希望它匹配两个模式。您可以使用字符串格式设置:

a = '456'
b = 'jkl'

re.findall(rf'\b(?:{a}{b}|{b}{a})\b', content)
['456jkl', 'jkl456']

这意味着“仅匹配 该序列,或者相反”。这样,“伪造的?”模式,例如“ 456456”和“ jkljkl”将不匹配。

(适用于python3.6 + f字符串。)

答案 1 :(得分:0)

您的正则表达式读取(jkl|456)+,这意味着匹配jkl456并至少执行一次。那就是给你第二和第三场比赛的原因。您需要使用(jkl|456){2}来代替,这意味着“将其精确匹配两次”。