我正在尝试将服务名称及其状态与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)
;我只想要名字和州。
有任何帮助吗?
答案 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)