2017-03-16 166 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