Python正则如何获取特定特殊字符组的正确起始索引?
解决正则匹配特定字符组合的索引问题
你的问题出在当前正则表达式的逻辑上:[/ \\][\\ /] 会匹配任意两个分别来自两个字符类的字符,而不是你要的仅/ \和\ /这两种固定组合。所以最后那两个连续的/(位置12和13)也被误匹配了,导致多出来一个索引12。
修正方案
把正则改成明确匹配两种目标组合,而不是用字符类的任意组合:
import re a = re.finditer(r"(?:/ \\|\\ /)", "/ \\ / \\ / \\ / /") print([m.start(0) for m in a])
解释一下改动:
(?:...)是非捕获组,用来把两种匹配规则打包在一起,不会额外生成多余的捕获组|表示“或”的逻辑,明确指定要么匹配/ \,要么匹配\ /- 这样就只会精准匹配你需要的两种字符组合,不会把
//这种不符合预期的情况算进去
运行上面的代码,就会得到你期望的结果:[0, 2, 4, 6, 8, 10]
内容的提问来源于stack exchange,提问作者Abhishek Kumar
相关产品推荐
相关产品推荐

