gpt4 book ai didi

python - 在 python : How to perform regular expression search on "circular" string

转载 作者:行者123 更新时间:2023-11-28 22:52:54 26 4
gpt4 key购买 nike

假设:

string="aacctcaaaca"
find="aaa"

我想找出所有出现的 find。

通常情况下,我会这样做

re.findall(find, string)

要注意的是字符串是循环的,即字符串的开始/结束是无关紧要的。所以前两个+最后一个a组成的“aaa”也要算进去。

另外,我想找到匹配的开始位置(上例中的6和10)

我正在考虑将 string[0:len(find)-1] 添加到 string 并在该新字符串上执行 re即

re.findall(find, string+string[0:len(find)-1])

听起来对吗?还有其他想法/建议吗?

最佳答案

您目前的做法似乎非常合理。另一种选择是仅连接整个字符串并忽略包装后开始的任何匹配项。

例如:

string="aacctcaaaca"
find="aaa"
[m.group(0) for m in re.finditer(find, string+string) if m.start() < len(string)]

这更具可扩展性,因为您可以使用任意正则表达式,例如 a{3,},而您可能无法依赖 len(find) .

正如 mgilson 在评论中所建议的那样,您可以通过使用 itertools 来提高效率,这样您就不会发现不必要的重复匹配项。

它看起来像这样:

from itertools import takewhile
takewhile(lambda m: m.start() < len(string), re.finditer(find, string+string))

请注意,这将返回匹配对象的可迭代对象,而不是匹配子字符串的列表。

关于python - 在 python : How to perform regular expression search on "circular" string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19943113/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com