Java正则表达式拆分字符串

标签 java regex string split

我一直在尝试在 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/

相关文章:

java - 在 Hibernate Search 中索引数据

java - 在多个类之间共享类实例的最佳设计

java - 如何在 Spring Boot 中从服务器任意发送到 STOMP 端点

regex - 使用正则表达式在Apache Hive中创建表将返回所有NULL值

javascript - 正则表达式与 JavaScript

python - 如何搜索和替换文件中的文本?

c++ - union 成员有一个重要的复制构造函数

java - android studio 按钮不起作用

javascript - 如何用javascript检测一个值是否为空?

ios - 在一个标签字符串中显示两种不同类型的变量