联系人[::]\s{1,2}([^\s,,、]+)(?:[\s,,、]{1,2}([^\s,,、]+))*
联系人: 啊啊,实打实大, 好说歹说、实打实 实打实大
>>> import regex as re
>>> p = r'联系人[::]\s*([^\s,,、]+)(?:[\s,,、]{1,2}([^\s,,、]+))*'
>>> s = '联系人: 啊啊,实打实大, 好说歹说、实打实 实打实大'
>>> re.findall(p, s)
[('啊啊', '实打实大')]
# finditer
>>> for i in re.finditer(p, s):
... print(i.groups())
...
('啊啊', '实打实大')
您可以在此处测试https://regex101.com/ (regex101现在无法保存正则表达式,所以我必须发布上面的图片)
我希望所有群组按[\s,,、]
分割,但只匹配第一个和最后一个。我觉得我的正则表达式没有任何错误,虽然结果是错误的,这让我困了半个小时......
答案 0 :(得分:1)
正如我在评论中提到的,您需要使用re.search
(仅限一个匹配项)或re.finditer
(以获得多个匹配项)并访问相应的组captures
(在您的情况下,它是captures(2)
):
>>> import regex as re
>>> p = r'联系人[::]\s*([^\s,,、]+)(?:[\s,,、]{1,2}([^\s,,、]+))*'
>>> s = '联系人: 啊啊,实打实大, 好说歹说、实打实 实打实大'
>>> res = []
>>> for x in re.finditer(p, s):
res.append(x.captures(2))
>>> print(res)
[['实打实大', '好说歹说', '实打实', '实打实大']]
>>> m = re.search(p, s)
>>> if m:
print(m.captures(2))
['实打实大', '好说歹说', '实打实', '实打实大']