好的,所以我发现了这个:如何查找子字符串的所有出现位置? https://stackoverflow.com/questions/4664850/find-all-occurrences-of-a-substring-in-python
也就是说,要获取列表中子字符串重叠出现的索引,您可以使用:
[m.start() for m in re.finditer('(?=SUBSTRING)', 'STRING')]
这是有效的,但我的问题是要查找的字符串和子字符串都是由变量定义的。我对正则表达式了解不够,不知道如何处理它 - 我可以让它与非重叠子字符串一起工作,那就是:
[m.start() for m in re.finditer(p3, p1)]
Edit:
既然有人问了,那我就具体说一下。 p1 和 p3 可以是任何字符串,但如果是,例如p3 = "tryt"
and p1 = "trytryt"
,结果应该是[0, 3]
.
论据re.finditer http://docs.python.org/2/library/re.html#re.finditer是简单的字符串。如果变量中有子字符串,只需将其格式化为正则表达式即可。就像是'(?={0})'.format(p3)
是一个开始。自从各种符号确实有特殊的含义 http://docs.python.org/2/library/re.html#regular-expression-syntax在 RE 中你会想逃离它们。幸运的是re module http://docs.python.org/2/library/re.html包括re.escape http://docs.python.org/2/library/re.html#re.escape正是为了这样的需要。
[m.start() for m in re.finditer('(?={0})'.format(re.escape(p3)), p1)]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)