Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python-如何在正则表达式中获得重叠文本匹配_Python_Regex_Overlapping Matches - Fatal编程技术网

python-如何在正则表达式中获得重叠文本匹配

python-如何在正则表达式中获得重叠文本匹配,python,regex,overlapping-matches,Python,Regex,Overlapping Matches,我使用以下方法获取所有匹配,包括根据线程重叠: 其中t是s的子集。但是,我得到以下错误: Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: findall() got an unexpected keyword argument 'overlapped.' 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 TypeError:findall()获得意

我使用以下方法获取所有匹配,包括根据线程重叠:

其中t是s的子集。但是,我得到以下错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: findall() got an unexpected keyword argument 'overlapped.'
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
TypeError:findall()获得意外的关键字参数“重叠”

我做错了什么/重叠了过时的标志/你会怎么做?非常感谢所有的帮助。

正如坎宁安和克劳斯所提到的,我指的旗帜来自一个不同的包,不是重新包装的

不过,我在不下载外部软件包的情况下,通过使用lookahead找到了一个解决方案:

[(m.start(0), m.end(0)) for m in re.finditer('(?='+t+')',s)]

当s='gatatattgcatactt'和t='ATAT'时,得到[(1,1)、(3,3)、(9,9)]。我不需要在匹配中返回文本,只需返回索引,因此它是否匹配[''''',''并不重要。

您想匹配什么?另外,
overlapped=True
是外部lib
regex
的一部分,它不能与python
re
lib一起使用,它会将引用者发布到新版本的regex模块。您必须首先安装它。而且,您链接的第一个线程上的第一个答案似乎可以满足您的需要,而无需任何其他库。请尝试
导入regex,因为re
regex可以定制为执行不同的重叠。你知道它是如何工作的吗?你是说我在这里使用的导入包regex还是re?我知道如何编辑软件包,是的。不是软件包。我的意思是为什么这个
(?=ATAT)
会有重叠。你真的想要
[(1,1)、(3,3)、(9,9)]
作为输出吗?实际上它确实匹配
(?=pattern)
,它只是不消耗它。因此,您不会认为匹配位置在匹配之间发生变化,但它确实会在下一个匹配开始之前提前1个字符的位置。这样就不存在无限循环了,它被称为“沿轨道颠簸”。我想所有的引擎都会这样。更安全的方法是通过
(?=模式)强制执行。
[(m.start(0), m.end(0)) for m in re.finditer('(?='+t+')',s)]