被正则表达式的 re.findall 函数困住了
Got stuck with re.findall function for regular expressions
我有一个看起来像
的字符串
text = "customer: Anna Smith; payment: 123; date: 12-02-2020; customer: Jack; payment: 10.3; date: 20-03-2020"
现在我想把它变成一个元组列表(稍后我可以用它来创建字典):
[('customer', 'Anna Smith'),
('payment', '123'),
('date', '12-02-2020'),
('customer', 'Jack'),
('payment', '10.3'),
('date', '20-03-2020')]
我尝试通过以下方式将 re.findall 用于此目的:
re.findall(u'(\w+): (.+?);', text)
当然它不会捕获最后一对键和值,因为正则表达式中有分号。我想我在这里需要一个 if-else if 操作:如果解析器遇到分号,那么它会提取单词,否则它会检查 EOL (\Z
) 的正则表达式。求助
如果你也想匹配最后一个,使用这个模式(\w+): (.+?)(?:;|$)
此模式与您的模式之间的唯一区别是它将接受查找以 ;
或 $
结尾的匹配项,后者是行尾字符。
不匹配 ;
,而是将 .+?
更改为 [^;]+
,这样它就可以匹配 ;
以外的所有内容。
re.findall(r'(\w+): ([^;]+)', text)
为简单起见,我们还可以使用 split
函数。
arr = text.split("; ")
result = []
for a in arr:
_ = a.split(": ")
result.append((_[0], _[1]))
现在 result
列表包含您想要的输出
我有一个看起来像
的字符串text = "customer: Anna Smith; payment: 123; date: 12-02-2020; customer: Jack; payment: 10.3; date: 20-03-2020"
现在我想把它变成一个元组列表(稍后我可以用它来创建字典):
[('customer', 'Anna Smith'),
('payment', '123'),
('date', '12-02-2020'),
('customer', 'Jack'),
('payment', '10.3'),
('date', '20-03-2020')]
我尝试通过以下方式将 re.findall 用于此目的:
re.findall(u'(\w+): (.+?);', text)
当然它不会捕获最后一对键和值,因为正则表达式中有分号。我想我在这里需要一个 if-else if 操作:如果解析器遇到分号,那么它会提取单词,否则它会检查 EOL (\Z
) 的正则表达式。求助
如果你也想匹配最后一个,使用这个模式(\w+): (.+?)(?:;|$)
此模式与您的模式之间的唯一区别是它将接受查找以 ;
或 $
结尾的匹配项,后者是行尾字符。
不匹配 ;
,而是将 .+?
更改为 [^;]+
,这样它就可以匹配 ;
以外的所有内容。
re.findall(r'(\w+): ([^;]+)', text)
为简单起见,我们还可以使用 split
函数。
arr = text.split("; ")
result = []
for a in arr:
_ = a.split(": ")
result.append((_[0], _[1]))
现在 result
列表包含您想要的输出