首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java regex从ascii文本中识别3列表

Java regex从ascii文本中识别3列表
EN

Stack Overflow用户
提问于 2014-05-16 16:28:54
回答 2查看 290关注 0票数 1

我收到的数据如下所示:

代码语言:javascript
复制
Applications                    7 days          6 days

我正在尝试创建与这一行相匹配的regex,而不是有另一列的行,如下所示:

代码语言:javascript
复制
Applications                    7 days          6 days        5 days

我试图使用的正则表达式是:

代码语言:javascript
复制
^(.*?)(\s){4,}(.*?)(\s){4,}[^(\s){2}]+

其中,[^(\s){2}]+将意味着选择所有的东西,直到一个双空间。问题是

  1. 一开始是没用的。
  2. 我的第二行还会与此相匹配。

我是否可以使用任何正则表达式来匹配3列表,而不是4列、5列等?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-16 16:41:29

您应该注意字符类([]),因为其中的一些字符被按字面处理(就像它们被转义了一样)。

试试这个regex (这里的演示):

代码语言:javascript
复制
^((?:(?!\s\s).)+)(?:\s){4,}((?:(?!\s\s).)+)(?:\s){4,}((?:.(?!\s\s))+)$
  • 我用((?:(?!\s\s).)+)切换了((?:(?!\s\s).)+),它可以将所有内容匹配到两个空格的序列中。
  • 我在最后添加了一个$,这样它就不会匹配超过两个列的行。
  • 我还添加了一些?:,这样这些组就变成了非匹配组。
  • 最后,我从正则表达式的末尾删除了字符类,并添加了一个负面的前瞻。

不以空格结尾的列

此列不接受第二列以空格(这里的演示)结尾的行:

代码语言:javascript
复制
^((?:(?!\s\s).)+)(?:\s){4,}((?:(?!\s\s).)+)(?:\s){4,}((?:.(?!\s\s)(?!\s$))+)$

注意,在最后一组中添加了第二个负面展望:(?!\s$)

票数 2
EN

Stack Overflow用户

发布于 2014-05-16 16:51:53

试试这个:

代码语言:javascript
复制
^[^\s]*(\s{2,}[^\s].*){2,}

假设在每个列值之前,至少有两个空格。

演示

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23700264

复制
相关文章

相似问题

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