簡體   English   中英

正則表達式:從行的中間提取文本

[英]Regular expression : extract text from middle of line

我需要從下面的示例中提取文本,如下所示 - 示例文本 -

Link speed type is OK, link duplex type is DOWN
Unknown-speed mode, Link speed type is OK, Flow-control is disabled
Link speed type is OK, link duplex type is DOWN, Flow-control is disabled

由此我想提取以鏈接速度開始的行(它可以在行開始或在中間行)直到流控制...(此部分可以存在或不存在)。

所以期望的輸出將是這樣的 -

Link speed type is OK, link duplex type is DOWN
Link speed type is OK
Link speed type is OK, link duplex type is DOWN

表示第一行和第三行已滿,而第二行只有鏈接速度部分,不包括逗號和流量控制部分..我嘗試了幾種方法..

^\s*(?:.*,)?\s*(Link speed.*)

問題 - 這選擇第二行直到結束。

^\s*(?:.*,)?\s*(Link speed.*(?=\W*Flow-control))

它不會選擇沒有流量控制的第一行。

最簡單的方法是使用非貪婪的修飾符?

(Link speed.*?)(Flow-control|$)

這將匹配從'Link speed'開始到'Flow-control'或行尾的任何內容。

您可以嘗試以下正面的前瞻性正則表達式。

\bLink speed\b.*?(?=\bFlow-control\b|$)

.*? 將匹配到字符串Flow-control如果它存在),否則這將匹配到行結束的所有字符。

要么

要獲得您期望的輸出而不使用逗號,

\bLink speed\b.*?(?=,\s*\bFlow-control\b|$)

DEMO

在java中,您需要使用PatternMatcher類來提取特定的子字符串。

Pattern p = Pattern.compile("(?m)\\bLink speed\\b.*?(?=,\\s*\\bFlow-control\\b|$)");

暫無
暫無

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

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