我一直在尝试在 Java 中构建一个模式,以通过破折号和制表符拆分以下字符串。异常(exception)情况是,如果在字符串中已经遇到制表符之后出现破折号,即使出现一次,我们也会停止在破折号上拆分,而只会在制表符上拆分。例如:
输入字符串(那些大空格是制表符):
"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"]
请注意“4852174-”中不应该出现的额外破折号。我已经尝试了很长时间来尝试解决这个问题,但我所做的任何小改动都会破坏其他地方的 split 。
如果能帮助解决这个问题,我们将不胜感激。提前致谢!
最佳答案
正则表达式
\t|-+(?!\w\t)
会将字符串拆分为您想要的数组,但如果没有进一步说明您想要做什么,我无法告诉您它是否适用于其他字符串。
您可以在 www.regexpal.com 测试正则表达式(这是你的正则表达式。)
请注意,您必须在 Java 中转义反斜杠。所以在 Java 中它将是
\\t|-+(?!\\w\\t)
关于Java正则表达式拆分字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20068796/