首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正则表达式:从行中间提取文本

正则表达式:从行中间提取文本
EN

Stack Overflow用户
提问于 2015-05-26 08:22:48
回答 2查看 2.7K关注 0票数 2

我需要从下面的样本中提取文本如下-样本文本-

代码语言:javascript
复制
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

从这里,我想提取以链接速度开始的线(可以是在行的起点,也可以是在中线),直到流控制.(这个部分可以或者不能出现)。

所以想要的输出是这样的-

代码语言:javascript
复制
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

指的是第一行和第三行满的部分,以及从第二行到第二行的唯一链接速度部分,不包括逗号和流控制部分。我试过几种方法..。

代码语言:javascript
复制
^\s*(?:.*,)?\s*(Link speed.*)

问题-这选择第二行直到结束。

代码语言:javascript
复制
^\s*(?:.*,)?\s*(Link speed.*(?=\W*Flow-control))

它没有选择没有流控制的第一行。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-26 08:26:08

最简单的方法是使用非贪婪的修饰符?

代码语言:javascript
复制
(Link speed.*?)(Flow-control|$)

这将匹配从'Link speed''Flow-control'或行尾的任何内容。

票数 3
EN

Stack Overflow用户

发布于 2015-05-26 08:25:57

您可以尝试下面的基于正向前瞻的正则表达式。

代码语言:javascript
复制
\bLink speed\b.*?(?=\bFlow-control\b|$)

.*?将匹配到字符串Flow-control,如果它存在,或者其他情况下,这将匹配到行结束之前的所有字符。

要获得您期望的没有逗号的输出,

代码语言:javascript
复制
\bLink speed\b.*?(?=,\s*\bFlow-control\b|$)

演示

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

代码语言:javascript
复制
Pattern p = Pattern.compile("(?m)\\bLink speed\\b.*?(?=,\\s*\\bFlow-control\\b|$)");
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30453234

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档