Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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 - Fatal编程技术网

Python正则表达式:重叠模式

Python正则表达式:重叠模式,python,regex,Python,Regex,假设我有一个字符串: string = 'AvBvC' 我想匹配A、B和C,这就是我所做的: match = re.search('(.*)v(.*)', string) print match.groups() 问题是,结果表明: ('AvB', 'C',) 而不是我想要的,那就是 ('A', 'B', 'C',) 我如何让它捕捉所有重叠的图案 谢谢 (我知道有一些帖子涉及同一个问题,但还没有找到Python的明确答案)你的问题有点不清楚,你似乎有一个比你实际展示的更复杂的字符串 使用

假设我有一个字符串:

string = 'AvBvC'
我想匹配
A
B
C
,这就是我所做的:

match = re.search('(.*)v(.*)', string)
print match.groups()
问题是,结果表明:

('AvB', 'C',)
而不是我想要的,那就是

('A', 'B', 'C',)
我如何让它捕捉所有重叠的图案

谢谢


(我知道有一些帖子涉及同一个问题,但还没有找到Python的明确答案)

你的问题有点不清楚,你似乎有一个比你实际展示的更复杂的字符串

使用
search()
仅匹配第一个匹配项,可以使用
findall()
匹配所有匹配项

matches = re.findall(r'[^v]+', string)
['A', 'B', 'C']
另一个选项是对需要拆分的某些字符进行
拆分

>>> re.split('v', 'AvBvC')
['A', 'B', 'C']

你的问题有点不清楚,你的问题似乎比你的实际表现更复杂

使用
search()
仅匹配第一个匹配项,可以使用
findall()
匹配所有匹配项

matches = re.findall(r'[^v]+', string)
['A', 'B', 'C']
另一个选项是对需要拆分的某些字符进行
拆分

>>> re.split('v', 'AvBvC')
['A', 'B', 'C']

使用
re.split

>>> import re
>>> re.split('v', 'AvBvC')
['A', 'B', 'C']
为了进一步证明

>>> re.split('vw', 'AAvwBBvwCC')
['AA', 'BB', 'CC']

使用
re.split

>>> import re
>>> re.split('v', 'AvBvC')
['A', 'B', 'C']
为了进一步证明

>>> re.split('vw', 'AAvwBBvwCC')
['AA', 'BB', 'CC']

请详细说明你想要的确切输出。我猜不出来。@Tim Peters抱歉我想要('A','B','C',)@PeterdGlopper耶!!刚刚修改了我的帖子(我原来的代码比这个长得多,也复杂得多,对不起)更多的细节会有帮助-你可以用
split('v')
来做上面的问题,所以我只能假设你有一个更复杂的情况。这可能是你想要的?请详细说明你想要的确切输出。我猜不出来。@Tim Peters抱歉我想要('A','B','C',)@PeterdGlopper耶!!刚刚修改了我的帖子(我原来的代码比这个长得多,也复杂得多,对不起)更多的细节会有帮助-你可以用
split('v')
来做上面的问题,所以我只能假设你有一个更复杂的情况。这可能是你想要的?这适用于我的示例,但我的实际字符串包含非单个字符的内容,如A、B、C。。。那么,在使用“搜索”而不是“findall”时,有没有办法做到这一点呢?
search()
match()
只返回一个结果。所以,不。你需要让你的问题更清楚;-)@TimPeters为什么负面前瞻不允许我匹配字符串的开头?@thefourtheye,嗯?如果没有上下文(或代码),我不知道你在问什么-对不起。@thefourtheye,那么有些人肯定会被草率的术语弄糊涂;-)“固定宽度”限制仅适用于向后看-它不适用于向后看。原因很简单,就是实现不同宽度外观的绝对困难;对于“从左到右”的搜索引擎来说,它们是“非常不自然的”。我的例子就是这样,但我的实际字符串包含的不是单个字符的内容,例如a、B、C。。。那么,在使用“搜索”而不是“findall”时,有没有办法做到这一点呢?
search()
match()
只返回一个结果。所以,不。你需要让你的问题更清楚;-)@TimPeters为什么负面前瞻不允许我匹配字符串的开头?@thefourtheye,嗯?如果没有上下文(或代码),我不知道你在问什么-对不起。@thefourtheye,那么有些人肯定会被草率的术语弄糊涂;-)“固定宽度”限制仅适用于向后看-它不适用于向后看。原因很简单,就是实现不同宽度外观的绝对困难;对于“从左到右”的搜索引擎来说,它们是“非常不自然的”。