如何重复提取两个固定标记之间的字符串
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']
假设我们有一个字符串
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']