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

时间:2011-03-06 21:59:19

标签: python regex

我正在尝试编写一个函数来清理Web应用程序中的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 :(得分:14)

尝试:

text = 'abcdefa'
pattern = re.compile('a|c')
[(m.group(), m.start()) for m in pattern.finditer(text)]

答案 1 :(得分:0)

我不知道如何让re.findall为您执行此操作,但以下情况应该有效:

  1. 使用re.findall查找所有匹配的字符串。
  2. 使用str.index查找re.findall返回的所有字符串的关联索引。 但是,执行此操作时要小心:如果字符串在不同的位置有两个确切的子字符串,那么re.findall将返回两者,但您需要告诉str.index您正在寻找第二次出现或nth出现的字符串。否则,它将返回您已有的索引。我能想到的最好方法是维护一个字典,其中包含re.findall结果的字符串作为键,索引列表作为值
  3. 希望这有帮助