![](/img/trans.png)
[英]How to extract subjects from the email headers using regular expression in Python?
[英]How to extract particlar message from a vast displayed output using python regular expression?
CH1:失敗
CH2:成功
CH3:失敗
: 很快
我想為此使用正則表達式而不是 json。
import pexpect
def quick_test():
ch = pexpect.spawn('ssh to server')
ch.logfile = sys.stdout
ch.expect("Select channels")
print ("\n########################################\n")
ch.sendline("1")
ch.expect("Enter ch to run:")
ch.sendline("CH1,0")
var1=ch.after
print(var1)
ch.expect("Enter Test:")
var2=ch.before
print(var2)
ch.sendline("CH2,0")
ch.expect("Enter Test:")
var3=ch.before
print(var3)
ch.sendline("CH3,0")
ch.expect("Enter Test:")
var4=ch.before
print(var4)
ch.sendline("CH4,0")
ch.expect("Enter Test:")
var5=ch.before
print(var5)
ch.sendline("CH5,0")
ch.expect("Enter Test:")
var6=ch.before
print(var6)
ch.sendline("CH6,0")
ch.expect("Enter Test:")
var7=ch.before
print(var7)
ch.sendline("CH7,0")
ch.expect("Enter Test:")
var8=ch.before
print(var8)
ch.sendline("CH8,0")
ch.expect("Enter Test:")
var9=ch.before
print(var9)
ch.sendline("CH9,0")
ch.expect("Enter Test:")
var10=ch.before
print(var10)
ch.sendline("CH10,0")
ch.expect("Enter Test:")
var11=ch.before
print(var11)
ch.sendline("CH11,0")
if __name__ == '__main__':
quick_test()
output:
output
###########################################
There are plenty of output displayed in which these below lines are included and
not in the given order and are displayed randomly.
CH1,0 Result: FAILED
CH2,0 Result: SUCCESS
CH3,0 Result: FAILED
CH4,0 Result: SUCCESS
CH5,0 Result: SUCCESS
CH6,0 Result: SUCCESS
CH7,0 Result: FAILED
CH8,0 Result: SUCCESS
CH9,0 Result: FAILED
CH10,0 Result: SUCCESS
CH11,0 Result: FAILED
從“CH2”開始的基本可重復單位是:
ch.sendline("CH2,0")
ch.expect("Enter Test:")
var3=ch.before
print(var3)
我們將不使用命名變量,而是使用一個包含列表數據結構的變量來保存 n 個值:
vars = []
我們使用 for 循環迭代到 11:
for i in range(11):
ch.sendline("CH{},0".format(i+1))
ch.expect("Enter Test:")
vars[i]=ch.before
print(vars[i])
第一個變量的處理方式不同,因此我們在循環外處理它:
vars = []
ch.expect("Enter ch to run:")
ch.sendline("CH1,0")
var1s[0]=ch.after
print(var1)
for i in range(1, 11):
ch.sendline("CH{},0".format(i+1))
ch.expect("Enter Test:")
vars[i]=ch.before
print(vars[i])
這應該將相同的文本打印到顯示器上,並且您的值仍應存儲在vars
列表中。 例如,以前在var8
中的內容現在將在vars[7]
中(因為 arrays 是零索引)。
使用正則表達式,例如此模式:
^(CH\d{1,}),0 Result: (SUCCESS|FAILED)$
您將在兩個位置捕獲組中獲得所需的字符串。
您可以再次使用 for 循環匹配 output 中的每一行(假設此 output 存儲在某處,例如從文件中讀入,而不是簡單地打印到顯示器)。
使用 Python 的re
模塊:
pattern = r"^(CH\d{1,}),0 Result: (SUCCESS|FAILED)$" # r-string
sampleOutputLine = "CH1,0 Result: FAILED"
m = re.match(pattern, sampleOutputLine)
print(m.groups())
Output:
('CH1', 'FAILED')
然后,您可以根據需要格式化組,例如:
formattedOutputLine = "{}: ".format(m.groups[0])
if m.groups[1] === "SUCCESS":
formattedOutputLine += m.groups[1]
else:
formattedOutputLine += m.groups[1].lower()
假設 output 行作為字符串列表存儲在變量output
中,其中每個字符串是一行:
pattern = r"^(CH\d{1,}),0 Result: (SUCCESS|FAILED)$" # r-string
formattedOutput = []
for line in output:
m = re.match(pattern, line) # consider compiling the pattern beforehand if your output is large, for performance
formattedOutputLine = "{}: ".format(m.groups[0])
if m.groups[1] === "SUCCESS":
formattedOutputLine += m.groups[1]
else:
formattedOutputLine += m.groups[1].lower()
formattedOutput.append(formattedOutputLine)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.