只使用正则表达式方法,方法String.replaceAll和ArrayList 如何将字符串拆分为标记,但忽略引号内存在的定界符? 分隔符是任何非字母数字或引号文本的字符
例如: 字符串:
hello^world'this*has two tokens'
应该输出:
- hello
- worldthis*has two tokens
最佳答案
我知道已经有一个该死的好并且被接受的答案,但我想添加另一个基于正则表达式的方法(我可以说更简单)来使用任何非字母数字定界符分割给定的文本,该定界符不在单引号内使用
正则表达式:
/(?=(([^']+'){2})*[^']*$)[^a-zA-Z\\d]+/
这基本上意味着匹配一个非字母数字文本,如果它后跟偶数个单引号,换句话说,如果它在单引号之外,则匹配一个非字母数字文本。
代码:
String string = "hello^world'this*has two tokens'#2ndToken";
System.out.println(Arrays.toString(
string.split("(?=(([^']+'){2})*[^']*$)[^a-zA-Z\\d]+"))
);
输出:
[hello, world'this*has two tokens', 2ndToken]
演示:
关于java Regex - 拆分但忽略引号内的文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10864537/