如何在Python中获取字符位置列表?
我正在尝试写一个函数,用来清理网页应用中的unicode输入,目前我想要复现这篇网页最后的PHP函数:http://www.iamcal.com/understanding-bidirectional-text/
我想在Python中找到一个和PHP的preg_match_all功能相似的东西。RE函数的findall只返回匹配的内容,但不包含位置,而search只返回第一个匹配的结果。有没有什么函数可以让我得到所有匹配的内容,并且还带上它们在文本中的位置呢?
比如说,给我一个字符串abcdefa
和一个模式a|c
,我想得到类似[('a',0),('c',2),('a',6)]
这样的结果。
谢谢 :)
2 个回答
0
我不知道有没有办法让 re.findall
自动完成这个任务,但下面的方法应该可以:
- 先用
re.findall
找出所有匹配的字符串。 - 然后用
str.index
找到这些字符串在原始文本中的位置。不过,这里要小心:如果一个字符串在不同的位置出现了两次,re.findall
会返回这两个字符串,但你需要告诉str.index
你想找的是第二次出现的位置,或者是第n
次出现的位置。否则,它会返回你已经找到的位置。最好的办法是维护一个字典,把re.findall
返回的字符串作为键,对应的位置列表作为值。
希望这对你有帮助
15
试试这个:
text = 'abcdefa'
pattern = re.compile('a|c')
[(m.group(), m.start()) for m in pattern.finditer(text)]