繁体   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