这是分隔文本,但我想用正则表达式解析它。
第二列,下一列需要几秒或几毫秒。
>>> import re
>>> s = '''aaa
bbb|30s
ccc|500ms|1s'''
>>> re.findall(r'(\w+)(?:\|(\d+(?:s|ms)))?(?:\|(\d+(?:s|ms)))?', s)
输出(预期答案):
[('aaa', '', ''), ('bbb', '30s', ''), ('ccc', '500ms', '1s')]
我想通过使用像*或{x,y}这样的量词来缩短这种模式。
所以我做了:
>>> re.findall(r'(\w+)(?:(?:\|(\d+(?:s|ms)))*)', cmdstr)
[('aaa', ''), ('bbb', '30s'), ('ccc', '500ms')] # WRONG
我失败了。
我该怎么做这个正则表达式?
答案 0 :(得分:1)
[('aaa', '', ''), ('bbb', '30s', ''), ('ccc', '500ms', '1s')]
输出:
{{1}}
答案 1 :(得分:1)
您似乎在询问是否可以使用可变数量的正则表达式组。基于快速谷歌搜索,答案似乎是否定,正则表达式将匹配完整模式,但只有最后一个值将记录为同一组的重复匹配。
考虑简单地执行s.split('|')
,然后执行每个子字符串所需的任何检查。