gpt4 book ai didi

python 正则表达式匹配行是否存在

转载 作者:行者123 更新时间:2023-12-01 06:12:30 24 4
gpt4 key购买 nike

我在正则表达式方面遇到了一些问题。

这是要解析的文本示例:

output = """
country : USA
zzzzzzz
continent : Americ
eeeeeee
------
country : China
zzzzzzz
continent : Asia
planet : Earth
-------
country : Izbud
zzzzzzz
continent : Gladiora
zzzzzzz
zzzzzzz
planet : Mars
"""

我想解析这个并返回国家、大陆,最终返回地球。

所以我做了一个正则表达式:

results = re.findall(
r"""(?mx)
^country\s:\s*(.+)\s
(?:^.+\s)*?
^continent\s:\s*(.+)\s
(?:^.+\s)*?
(?:^planet\s:\s*(.+)\s)*?
""",output)

但是返回的是:

[('USA', 'Americ', ''), ('China', 'Asia', ''), ('Izbud', 'Gladiora', '')]

我不知道我的正则表达式哪里错了?

如果有人有想法,谢谢。

最佳答案

我发现了一种似乎有效的模式:

r"""(?mx)
^country\s:\s*(.+)\s
(?:^.+\s)*?
^continent\s:\s*(.+)\s
(?:^.+\s)*?
(?:^(?:planet\s:\s*(.+)\s|-+\s|\Z))
"""

基本上,我更改了最后一部分,以便它必须匹配以下内容之一:行星内容、一堆 - 或字符串结尾。这有点丑陋,但这是我能找到的唯一方法来确保它得到行星的东西。我的解决方案的一个问题是字符串末尾必须有一个空行(如您的示例中所示),否则它将无法获得最后一个匹配项。

顺便说一句,部分解决方案是修复 OP 模式的最后一行,使其只有一个 ?最后而不是 *?。但是,它只会匹配大陆信息后面的行的行星信息。之前没有得到任何东西的原因是*?很懒。如果可能的话,它将避免匹配。

关于python 正则表达式匹配行是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5032626/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com