如何用正则表达式匹配两个指定子串间的所有独立内容
如何用正则表达式匹配两个指定子串间的所有独立内容
嘿,这个问题我太熟了!你碰到的其实是正则里贪婪匹配的经典坑——之前用c(.*)e的时候,正则会尽可能抓取最长的内容,所以直接从第一个c一路匹配到最后一个e,自然就把两段内容合并成一大块了。
要拿到你想要的['ad', 'abab']这种独立结果,有两种简单的解决办法:
方法一:用非贪婪匹配模式
把正则里的.*改成.*?,也就是写成c(.*?)e。.*?是“非贪婪”的,它会在找到第一个符合条件的e就停止匹配,而不是一直找最后一个。用这个正则配合语言里的“全局匹配”方法(比如Python里的re.findall()),就能提取到每一段c和e之间的内容了。举个Python代码例子:import re target_str = "aabcadeaaabbacababe" results = re.findall(r'c(.*?)e', target_str) print(results) # 输出正好是 ['ad', 'abab']方法二:用排除字符集(更高效)
如果你的需求里,c和e之间不会出现c或者e本身,还可以写成c([^ce]*)e。这里的[^ce]表示“除了c和e之外的任意字符”,*表示匹配零个或多个这样的字符。这种写法不需要正则回溯,运行效率会更高,结果和上面的方法是一样的。
两种方法都能完美解决你的问题,选哪种就看你实际的场景需求啦!
备注:内容来源于stack exchange,提问作者skoleosho97
相关产品推荐
相关产品推荐

