加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用正则表达式以任意顺序匹配两个单词

发布时间:2020-12-13 21:53:33 所属栏目:百科 来源:网络整理
导读:我花了一些时间学习正则表达式,但我仍然不明白以下技巧如何以不同的顺序匹配两个单词. import rereobj = re.compile(r'^(?=.*?(John))(?=.*?(Peter)).*$',re.MULTILINE)string = '''John and PeterPeter and JohnJames and Peter and John'''re.findall(reob
我花了一些时间学习正则表达式,但我仍然不明白以下技巧如何以不同的顺序匹配两个单词.
import re
reobj = re.compile(r'^(?=.*?(John))(?=.*?(Peter)).*$',re.MULTILINE)

string = '''
John and Peter
Peter and John
James and Peter and John
'''
re.findall(reobj,string)

结果

[('John','Peter'),('John','Peter')]

(https://www.regex101.com/r/qW4rF4/1)

我知道(?=.*)部分被称为Positive Lookahead,但在这种情况下它是如何工作的?

任何解释?

它只是在任意顺序中都没有匹配.这里抓住了.*消耗了任何东西.正面的先行是断言.你有两个前瞻.它们是相互独立的.每个都断言一个所以最后你的正则表达式如下:

1)(?=.*?(John))===字符串应该有John.Just断言.不消耗任何东西

2)(?=.*?(彼得))===字符串应该有一个Peter.Just一个断言.不消耗任何东西

3).* ===如果断言已经通过则消耗任何东西

所以你看到这里的顺序并不重要.那就是断言应该通过的是什么.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读