如何重复提取两个固定标记之间的字符串

How to extract strings between two fixed marks repeatedly

假设我们有一个字符串 text="xaxbx" 我们试图得到“x”之间的一切。在这种情况下,答案应该是“a”和“b” 但是当我尝试

result=re.findall('x(.*?)x',text)

我只得到"a",没有得到"b" 是否有针对更一般情况的解决方案,例如 text="xaxbxcxdxexfx"?

谢谢!

也就是说,因为您通过直接匹配 x 来“消耗”它们。查找 lookahead and lookbehind。使用这些功能,您可以获得正确的解决方案:

(?<=x).*?(?=x)

regex101 上尝试一下,您可以在那里测试示例字符串,它们解释了正则表达式的每个部分。

re.findall('x(.*?)x',text)中,字符“x”在匹配过程中被消耗。您可以改用前瞻和后视:

import re

text="xaxbx"
re.findall(r"(?<=x)[^x]+(?=x)", text)

它给出:

['a', 'b']

另一种方法是使用正则表达式分组:

import re

text = "xaxbxcxdxexfx"
re.findall("x([^x]+)", text)

输出:

['a', 'b', 'c', 'd', 'e', 'f']