Java正则表达式拆分字符串

时间:2013-11-19 10:18:10

标签: java regex string split

我一直试图在Java中构建一个模式,用破折号和制表符分割下面的字符串。例外情况是,如果在字符串中遇到选项卡后出现破折号,即使只有一次,我们也会停止在破折号上拆分并仅在选项卡上拆分。例如:

输入字符串(那些大空格是制表符):

"4852174--r-watch   7   47  2   0   80-B    20  5"

预期输出:["4852174", "r", "watch", "7", "47", "2", "0", "80-B", "20", "5"]

我目前使用以下正则表达式:"(?<!\\d)(\\-+)(?!\t)|\t"

第一组括号表示我不希望在分隔符之前有任何数字,下一个表示我想要一个或多个破折号,最后一组要注意我不想跟随标签。当然,最后的OR用于按单个制表符分割。

我得到的结果如下: ["4852174-", "r", "watch", "7", "47", "2", "0", "80-B", "20", "5"]

注意&#34; 4852174中的额外短划线 - &#34;不应该在那里。我已经尝试了很长时间才试图解决这个问题,但是我所做的任何小改变都会破坏其他地方的分裂。

非常感谢任何帮助解决这个问题。提前谢谢!

2 个答案:

答案 0 :(得分:7)

正则表达式

\t|-+(?!\w\t)

会将字符串拆分为您想要的数组,但如果没有进一步说明您想要做什么,我无法告诉您它是否适用于其他字符串。

你可以在www.regexpal.com测试正则表达式(这是你的正则表达式。)

请注意,你必须逃避Java中的反斜杠。所以在Java中它将是

\\t|-+(?!\\w\\t)

答案 1 :(得分:1)

匹配字符串的正则表达式是: ^(([^ - \ s] +?)[ - \ s] *)+ $

即使连字符( - )重复两次以上,上述正则表达式也会匹配您的字符串。您可以通过获取第2组(\ 2)的匹配来获得预期的输出。

第1组匹配:(([^ - \ s] +?)[ - \ s] *)

第2组匹配:([^ - \ s] +?)=&gt;这是构建输出所需的分组。