Python使用re.search()提取两关键词间内容时如何取首关键词第二次出现
解决方法
有两种常用的正则写法可以实现需求,适配不同的使用场景:
方法1:匹配最后一次出现的Hello作为起点
如果Hello一共只会出现2次,用贪婪匹配的特性即可直接定位到第二次(最后一次)Hello的位置:
import re example_string = 'Hello A Bye, Hello B Ciao.' # 贪婪模式的.*会尽可能匹配最长内容,自动跳过第一次出现的Hello res = re.search(r'.*Hello(.*?)Ciao', example_string) if res: # 去除前后空格后得到结果B print(res.group(1).strip())
方法2:灵活指定第N次出现的Hello作为起点
如果需要适配第任意次关键词作为起点的场景,可以用非捕获分组限定匹配次数,以下示例指定以第2次出现的Hello为起点:
import re example_string = 'Hello A Bye, Hello B Ciao.' # 把{2}改为对应数字即可指定匹配第N次出现的Hello res = re.search(r'(?:.*?Hello){2}(.*?)Ciao', example_string) if res: print(res.group(1).strip())
原理解释
你最初的写法会从第一个命中的Hello就开始匹配,非贪婪模式下会一直匹配到首次出现的Ciao为止,所以结果会包含两次Hello之间的冗余内容。上述两种方案都是先主动匹配掉前N-1次的Hello,再捕获后续到Ciao的内容,就能得到符合预期的结果。
内容的提问来源于stack exchange,提问作者dd13
相关产品推荐
相关产品推荐

