Python正则表达式模式建议

时间:2017-03-16 23:36:18

标签: regex

我在我的python脚本中遇到了Regex的问题,我从来没有真正理解它是诚实的,但仍然觉得它令人困惑,但我认为在这种情况下我需要它。这是我的问题。

以下是我保存为字符串的输出:

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

从这个字符串我试图识别并保存" st0"到稍后要使用的变量,但是可能存在比仅需要找到的st0更多的结果。当新设备连接到服务器时会自动生成该数字(因此可能无限地存在st0,st1,st2,并且我希望将所有结果保存在元组中)

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

由于

1 个答案:

答案 0 :(得分: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。此处st\d+由于^$锚点(由于(?m)内联re.MULTILINE修饰符选项而匹配行边界,因此仅匹配整行) )。

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[root@modi ~]# cd /dev;ls | grep st\nnst0\nnst0a\nnst0l\nnst0m\nst0\nst1\nst0a\nst0l\nst0m\nstderr\nstdin\nstdout \nvhost-net\n[root@modi dev]#"
res = re.findall(reg, s)
print(res)
# => ['st0', 'st1']