Python正则表达式提取包含数字和字母的子字符串

时间:2015-01-20 18:31:59

标签: python regex string

我正在尝试提取包含数字和字母的子字符串:

string = "LINE     : 11m56.95s CPU    13m31.14s TODAY"

我只想要11m56.95s和13m31.14s

我试过这样做:

re.findall('\d+', string)

这不能给我我想要的东西,我也试过了:

re.findall('\d{2}[m]+\d[.]+\d|\+)

这也不起作用,还有其他建议吗?

5 个答案:

答案 0 :(得分:3)

您当前的正则表达式与您的预期不符。

您可以使用以下正则表达式来提取这些子字符串。

re.findall(r'\d+m\d+\.\d+s', string)

Live Demo

示例

>>> 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')