如何在Python中获取字符位置列表?

1 投票
2 回答
2106 浏览
提问于 2025-04-16 13:07

我正在尝试写一个函数,用来清理网页应用中的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 自动完成这个任务,但下面的方法应该可以:

  1. 先用 re.findall 找出所有匹配的字符串。
  2. 然后用 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)]

撰写回答