第一场比赛后停止

时间:2015-01-22 00:45:10

标签: python regex

我正在尝试将服务名称及其状态与Regex分开。

这很好用:

message = "svnserve is stopped"
match = re.search(r"(.*)\s+is\s+(\w*)", message)
print match.group(1),match.group(2)
# output=> svnserve stopped

但是当我找到这样的行时它不起作用:

message = "openssh-daemon (pid  1982) is running"
match = re.search(r"(.*)\s+is\s+(\w*)", message)
print match.group(1),match.group(2)
# output => openssh-daemon (pid  1982) running

如何移除(pid 1982);我只想要名字和州。

有任何帮助吗?

3 个答案:

答案 0 :(得分:1)

服务名称将始终是字符串中的第一个单词,其状态始终是最后一个单词。因此,您可以简单地拆分字符串并直接抓住这两个项目:

message = "svnserve is stopped"
match = message.split()
print match[0], match[-1]

演示:

>>> message = "svnserve is stopped"
>>> match = message.split()
>>> print match[0], match[-1]
svnserve stopped
>>>
>>> message = "openssh-daemon (pid  1982) is running"
>>> match = message.split()
>>> print match[0], match[-1]
openssh-daemon running
>>>

答案 1 :(得分:1)

您可以使用re.findall函数进行全局匹配。 \S+匹配一个或多个非空格字符。

>>> m = re.findall(r'^\S+|\S+$', message)
>>> print(m[0],m[1])
svnserve stopped
>>> message = "openssh-daemon (pid  1982) is running"
>>> m = re.findall(r'^\S+|\S+$', message)
>>> print(m[0],m[1])
openssh-daemon running

OR

如果您想将\s+is\s+输入正则表达式,请尝试以下操作。

>>> message = "openssh-daemon (pid  1982) is running"
>>> m = re.search(r'^(\S+).*?\s+is\s+.*?(\S+)$', message)
>>> print(m.group(1),m.group(2))
openssh-daemon running

或者你可以简单地使用re.search(r'^(\S+).*?(\S+)$', message)

答案 2 :(得分:0)

re.search(r"(.*)\s+is\s+(\w*)",str)

这个正则表达式将第一个空格作为第一个空格,然后将单词“is”与两侧未指定数量的空格匹配,然后将字母数字字符串作为其下一个组。第二组包括空格。一个更好的策略是采用空格分隔的第一个和最后一个单词。尝试

 match = re.search(r"^([\S]+).*\s([\S]+)$",str)