[英]Regex help to match groups
我正在嘗試編寫一個正則表達式來匹配具有多行的文本文件,例如:
* 964 0050.56aa.3480 dynamic 200 F F Veth1379
* 930 0025.b52a.dd7e static 0 F F Veth1469
我的意圖是匹配“ 0050.56aa.3480”和“ Veth1379”,並將它們放在group(1)和group(2)中,以備后用。
我寫的正則表達式是:
\*\s*\d{1,}\s*(\d{1,}\.(?:[a-z][a-z]*[0-9]+[a-z0-9]*)\.\d{1,})\s*(?:[a-z][a-z]+)\s*\d{1,}\s*.\s*.\s*((?:[a-z][a-z]*[0-9]+[a-z0-9]*))
但是當我在http://www.pythonregex.com/上進行測試時,它似乎不起作用
有人可以指出我在這里所做的任何明顯錯誤。
謝謝,〜新手
嘗試這個:
^\* [0-9]{3} +([0-9]{4}.[0-9a-z]{4}.[0-9a-z]{4}).*(Veth[0-9]{4})$
第一部分在捕獲組1中,捕獲組2中的“ Veth”代碼。
請考慮將“ 堆棧溢出正則表達式” FAQ標記為書簽,以備將來參考。 底部有一個在線測試人員列表。
我認為您不需要正則表達式:
for line in open('myfile','r').readlines():
fields = line.split( )
print "\n" + fields[1] + "\n" +fields[6]
一個非常嚴格的版本看起來像這樣:
^\*\s+\d{3}\s+(\d{4}(?:\.[0-9a-f]{4}){2})\s+\w+\s+\d+\s+\w\s+\w\s+([0-9A-Za-z]+)$
在這里我假設:
\\d+
等效於\\d{1,}
或[0-9]{1,}
,但讀起來更好(imo) \\.
匹配文字.
,如.
只會匹配任何東西 [az]{2}
與[az][az]
等效,但閱讀效果更好(我再次認為) \\w
代替一個單詞字符 這樣做:
reobj = re.compile(r"^.*?([\w]{4}\.[\w]{4}\.[\w]{4}).*?([\w]+)$", re.IGNORECASE | re.MULTILINE)
match = reobj.search(subject)
if match:
group1 = match.group(1)
group2 = match.group(2)
else:
result = ""
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.