我一直试图在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;不应该在那里。我已经尝试了很长时间才试图解决这个问题,但是我所做的任何小改变都会破坏其他地方的分裂。
非常感谢任何帮助解决这个问题。提前谢谢!
答案 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;这是构建输出所需的分组。