gpt4 book ai didi

python - 匹配一个单词,后跟任意顺序的两个可选组

转载 作者:太空宇宙 更新时间:2023-11-03 14:39:56 25 4
gpt4 key购买 nike

我正在为一个小库编写一种解析器。

我的字符串格式如下:

text = "Louis,Edward,John|85.56!26,Billy,Don!18|78.0,Dean"

为了更清楚一点,这是一个人姓名列表,用逗号分隔,后跟两个可选分隔符(|!),在第一个之后是权重,它是一个数字,带有 0-2 位小数,而在“!”之后有一个整数代表年龄。分隔符和相关值可以按任何顺序出现,如您在 JohnDon 中看到的那样。

我需要使用正则表达式(我知道我可以用很多其他方法来做到这一点)提取所有长度在 2 到 4 之间的名称以及两个分隔符和以下值(如果它们存在的话)。

这是我的预期结果:

[('John', '|85.56', '!26'), ('Don', '|78.00' ,'!18'), ('Dean', '', '')]

我正在尝试使用这段代码:

import re
text = "Louis,Edward,John|85.56!26,Billy,Don!18|78.0,Dean"
pattern = re.compile(r'(\b\w{2,4}\b)(\!\d+)?(\|\d+(?:\.\d{1,2})?)?')
search_result = pattern.findall(text)
print(search_result)

但这是实际结果:

[('John', '', '|85.56'), ('26', '', ''), ('Don', '!18', '|78.0'), ('Dean', '', '')]

最佳答案

以下正则表达式似乎提供了您想要的内容:

re.findall(r'(\b[a-z]{2,4}\b)(?:(!\d+)|(\|\d+(?:\.\d{,2})?))*', text, re.I)
#[('John', '!26', '|85.56'), ('Don', '!18', '|78.0'), ('Dean', '', '')]

如果您不想要这些名称,您可以轻松地过滤掉它们。

关于python - 匹配一个单词,后跟任意顺序的两个可选组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54192208/

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