簡體   English   中英

使用貪婪和非貪婪正則表達式的問題

[英]Problem using greedy and non-greedy regular expressions

我不明白我在做什么錯。 我只需要提取router_name和端口號。 路由器名稱為“ C1900_ROUTER1_SR7 ”,端口為“ C1900_ROUTER1_SR7 ”,並且可能存在“ B:C1900_ROUTER1_SR7 ......”而不是“ A:C1900_ROUTER1_SR7 ..........”

string = "A:C1900_ROUTER1_SR7# 

A:C1900_ROUTER1_SR7# echo "<team:script>"

<team:script>

A:C1900_ROUTER1_SR7# /environment no more 

A:C1900_ROUTER1_SR7# 

A:C1900_ROUTER1_SR7# show port 4/1/4 

"

regex_S2 = '(A|B):(?P<routername>.*?)#\s*show port\s*(?P<port>.*?)\s*\n'

match_L0_iter = re.findall(regex_S2, string, flags=re.DOTALL)

捕獲的路由器名稱組結果= "C1900_ROUTER1_SR7# A:C1900_ROUTER1_SR7# echo "<pnm:script>" <pnm:script> A:C1900_ROUTER1_SR7# /environment no more A:C1900_ROUTER1_SR7# A:C1900_ROUTER1_SR7"

您可以更新模式以匹配末尾的非空格字符,而不是非貪婪的.*? 要匹配路由器名稱,您還可以使用否定的字符類 [^#]+匹配除#以外的任何字符。

要匹配A或B,可以使用字符類。

[AB]:(?P<routername>[^#]+)#\s*show port\s*(?P<port>\S+)

正則表達式演示

如果必須同時匹配其余行和換行符,則可以像在模式中一樣附加\\s*\\n

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM