我将尝试在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"]
请注意“4852174-”中多余的连字符,这是不应该存在的。 我已经尝试了很长时间来解决这个问题,但是我做出的任何小修改都会破坏其他地方的拆分。非常感谢您提供解决此问题的任何帮助。 先谢谢!
80-B
作为输出呢? - bhathiya-perera(?<!\d)
部分)。我觉得您可能缺少一些必要的规则。您能回答一下:为什么80-B
不应该被拆分? - sp00m80-B
中破折号后面没有制表符,为什么不能分割? - anubhava(?:[^\s-]|(?<=\d)-(?=[^\W\d]))+
。我考虑匹配而不是分割。我认为你的规则没有明确定义,所以我只是让它针对你提供的输入“工作”。 - HamZa