我正在尝试提取包含数字和字母的子字符串:
string = "LINE : 11m56.95s CPU 13m31.14s TODAY"
我只想要11m56.95s和13m31.14s
我试过这样做:
re.findall('\d+', string)
这不能给我我想要的东西,我也试过了:
re.findall('\d{2}[m]+\d[.]+\d|\+)
这也不起作用,还有其他建议吗?
答案 0 :(得分:3)
您当前的正则表达式与您的预期不符。
您可以使用以下正则表达式来提取这些子字符串。
re.findall(r'\d+m\d+\.\d+s', string)
示例强>:
>>> import re
>>> s = 'LINE : 11m56.95s CPU 13m31.14s TODAY'
>>> for x in re.findall(r'\d+m\d+\.\d+s', s):
... print x
11m56.95s
13m31.14s
答案 1 :(得分:3)
试试这个:
re.findall("[0-9]{2}[m][0-9]{2}\.[0-9]{2}[s]", string)
输出:
['11m56.95s', '13m31.14s']
答案 2 :(得分:2)
您的正则表达式模式未正确形成。它目前正在匹配:
\d{2} # Two digits
[m]+ # One or more m characters
\d # A digit
[.]+ # One or more . characters
\d|\+ # A digit or +
相反,你应该使用:
>>> import re
>>> string = "LINE : 11m56.95s CPU 13m31.14s TODAY"
>>> re.findall('\d+m\d+\.\d+s', string)
['11m56.95s', '13m31.14s']
>>>
以下是新模式匹配的解释:
\d+ # One or more digits
m # m
\d+ # One or more digits
\. # .
\d+ # One or more digits
s # s
答案 3 :(得分:2)
\b #word boundary
\d+ #starts with digit
.*? #anything (non-greedy so its the smallest possible match)
s #ends with s
\b #word boundary
答案 4 :(得分:1)
如果您的行与您的示例完全相同,则拆分将起作用:
s = "LINE : 11m56.95s CPU 13m31.14s TODAY"
spl = s.split()
a,b = spl[2],spl[4]
print(a,b)
('11m56.95s', '13m31.14s')