正则表达式匹配空白表

时间:2016-12-23 13:12:32

标签: java regex

我想匹配表的行。没有符号表示一个单元格开始或结束的位置,而是空格。字符串与<中间的3个空格应该被看作是细胞。

示例行:

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

这是我天真无效的尝试,我只想要2个细胞:

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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