我正在为一个小图书馆写一种解析器.
我的字符串采用以下格式:
text = "Louis,Edward,John|85.56!26,Billy,Don!18|78.0,Dean"
为了更清楚一点,这是人名列表,以逗号分隔,后跟两个可选的分隔符(|和!),第一个后面的权重是一个带有0-2小数位的数字,而“ !”有一个代表年龄的整数.分隔符和相关值可以按任何顺序出现,如John和Don所见.
我需要使用正则表达式(我知道我可以通过许多其他方式来提取)所有长度在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', '', '')]