2017-03-16 118 views
2

我在我的python脚本中遇到正则表达式的问题,我从来没有真正明白它是诚实的,仍然觉得困惑,但我认为在这种情况下我需要它。这是我的问题。Python正则表达式模式建议

下面是输出我已经保存为一个字符串:要在以后使用

cd /dev;ls | grep st 
[[email protected] ~]# cd /dev;ls | grep st 
nst0 
nst0a 
nst0l 
nst0m 
st0 
st0a 
st0l 
st0m 
stderr 
stdin 
stdout 
vhost-net 
[[email protected] dev]# 

从这个字符串我试图找出和“ST0”保存到一个变量,但可能会有更多的结果不仅仅是st0需要被发现。当一个新的设备连接到服务器时,这个数字是自动生成的(因此无限期地可能有st0,st1,st2,我想将所有结果保存在一个元组中)

任何人都可以告诉我什么正则表达式模式I应该使用识别“st”作为前两个字符并在之后获取后续数字?

感谢

+0

那么,你尝试过什么? “前两个字符”是什么意思?哪里? –

+0

由前两个字符我的意思是“st”和我的意思是在输出字符串中我有复制和粘贴。我试过re.findall(r'\ bst \ b',输出),它返回['st','st']但我不知道如何获得这两个字符 – Tolki

+0

使用're.findall(r'\ bst \ d + \ b”,输出)'。如果你的意思是'st \ d +'作为一个整体,那么使用're.findall(r'(?m)^ st \ d + $',输出)' –

回答

0

您可使用以下两种解决方案:

re.findall(r'\bst\d+\b',output) 

regex demo。这里,\bst\d+\b匹配st +字边界之间的一个或多个数字(位于字符串的开始/结束或非字符字符之间)。

或者,如果你指的是st\d+应该是一整行,使用

re.findall(r'(?m)^st\d+$',output) 

this regex demo。这里,由于^$锚点(与(?m)相匹配的边界线,内嵌re.MULTILINE修改器选项),因此st\d+仅匹配整行。

Python demo

import re 

reg = r"\bst\d+\b" 
s = "Last login: Thu Mar 16 23:04:57 2017 from 16.29.4.112\ncd /dev;ls | grep st\n[[email protected] ~]# cd /dev;ls | grep st\nnst0\nnst0a\nnst0l\nnst0m\nst0\nst1\nst0a\nst0l\nst0m\nstderr\nstdin\nstdout \nvhost-net\n[[email protected] dev]#" 
res = re.findall(reg, s) 
print(res) 
# => ['st0', 'st1'] 
+0

不幸的是,既没有实例工作,我甚至尝试过re.findall(r'\ bst0 \ b',输出)试图找到字符串内的单词,甚至没有' t返回任何东西 – Tolki

+0

然后你的输入与你发布的不同。或者你甚至没有尝试我的代码。 –

+0

The String Im Searching: cd/dev; ls | grep st [root @ modi〜]#cd/dev; ls | grep的ST nst0 nst0a nst0l nst0m ST0 st0a st0l st0m 标准错误 标准输入 标准输出 虚拟主机网 [根@作案开发]# – Tolki