假设你有这个字符串:'catdogfoxcat'
我可以使用以下正则表达式轻松地将其拆分:
re.compile('(dog)|(cat)|(fox)').findall(the_string)
在python中,结果是:
[('', 'cat', ''),
('dog', '', ''),
('', '', 'fox'),
('dog', '', ''),
('dog', '', ''),
('', '', 'fox'),
('', 'cat', '')]
太完美了
现在让我们将该字符串改为:“catdogaaadoggdogbcat”
如果第三个regex项是任意的(aaa/bbb/随便什么),我想不出怎么做。我想要这样的东西:re.compile('(dog)|(cat)|(.*?)').findall(the_string)
目前我得到以下结果,这是没有意义的
[('', 'cat', ''),
('dog', '', ''),
('', '', ''),
('', '', ''),
('', '', ''),
('dog', '', ''),
('dog', '', ''),
('', '', ''),
('', '', ''),
('', '', ''),
('', 'cat', ''),
('', '', '')]
这里出了什么问题?如何修复正则表达式
我更期待这样的结果:
[('', 'cat', ''),
('dog', '', ''),
('', '', 'aaa'),
('dog', '', ''),
('dog', '', ''),
('', '', 'bbb'),
('', 'cat', '')]
正则表达式将从\u字符串的位置0开始,或者更具体地说,从
the_string[0]
开始使用您提供的替代项搜索匹配项:首先是dog
,如果没有找到,则是cat
,最后是.*?
(即“0项,除非我需要匹配更多项”)如果正则表达式找不到
dog
或cat
或.*?
,则此时,它将在字符串中进一步插入一个字符:the_string[1]
,然后在该新点重试.*?
表示匹配“零个或多个字符,尽可能少的次数”,这与表示“在the_string[0]
位置匹配一个零长度的字符串”相同,它总是这样做:结果总是“空”要做到这一点,最棘手的方法是说:
dog
或cat
或“所有文本直到dog
或cat
”:结果is this
它不是很干净,而且有点慢,所以您可能需要尝试另一种方法:删除文本中的所有
dog
和cat
,剩下的就是您想要的剩余文本第三个字符串是任意的,可能存在也可能不存在! 就是这样
希望有帮助
如果没有额外的条件,
.*?
将匹配任何空字符串。请求后跟dog
、cat
或文本结尾:演示:https://regex101.com/r/UPwom6/1
相关问题 更多 >
编程相关推荐