使用正则表达式以任意顺序匹配两个单词
发布时间: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).* ===如果断言已经通过则消耗任何东西 所以你看到这里的顺序并不重要.那就是断言应该通过的是什么. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |