我想匹配表的行。没有符号表示一个单元格开始或结束的位置,而是空格。字符串与<中间的3个空格应该被看作是细胞。
示例行:
" here is a $$ cell here another cells I dont care about........."
这是我天真无效的尝试,我只想要2个细胞:
\\s{5,}([^\\s{2,}]+)\\s{5,}([^\\s{2,}]+)\\s{5,}.*
答案 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