【问题标题】:Regex match a whitespace table正则表达式匹配空白表
【发布时间】:2017-05-09 04:49:48
【问题描述】:

我想匹配表格的行。没有符号表示一个单元格的开始或结束位置,而是空格。中间有

示例行:

"           here is a $$ cell               here  another         cells I dont care about........."

这是我天真而无效的尝试,我只想要 2 个单元格:

\\s{5,}([^\\s{2,}]+)\\s{5,}([^\\s{2,}]+)\\s{5,}.*

【问题讨论】:

  • 前导/尾随空格怎么样?您期望任何空单元格吗?见this demo, BTW
  • 不,我不希望任何空单元格。我基本上是在寻找前 n 组字符。
  • 那么,["here is a $$ cell", "here another", "cells I dont care about........."] 是预期的输出吗?
  • 是的。抱歉,如果不清楚。不过,在这种情况下,我只需要 2 场比赛。所以我想我只取前两个列表元素。

标签: java regex


【解决方案1】:

这个正则表达式应该可以解决问题:

 (?<=\s{3,}|^\s?\s?)\w[\w\W]*?(?=\s{3,}|\s?\s?$)

使用 Java 格式是:

"(?<=\\s{3,}|^\\s?\\s?)\\w[\\w\\W]*?(?=\\s{3,}|\\s?\\s?$)"

它的作用是尝试匹配一组尽可能短的以非空白字符开头的字符(因此它不匹配单个空格)。然后它检查是否至少有 3 个白色空格或行首,然后检查匹配后是否有至少 3 个空格或行尾。

它只匹配一个单元格,所以只需重复表达式以匹配多个单元格。

你可以在这里解决这个问题:http://fiddle.re/0tmcza

【讨论】:

    【解决方案2】:

    您可以先修剪输入,然后用 3 个或更多空格分割,然后检查您是否获得了前 2 个单元格值并使用它们:

    String s = "           here is a $$ cell               here  another         cells I dont care about.........";
    String[] res = s.trim().split("\\s{3,}");
    if (res.length > 1) {
        System.out.println(res[0]); // Item 1
        System.out.println(res[1]); // Item 2, the rest is unimportant
    }
    

    Java demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-03
      • 2010-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-26
      相关资源
      最近更新 更多