繁体   English   中英

Java正则表达式-拆分但忽略引号内的文本?

[英]java Regex - split but ignore text inside quotes?

仅使用正则表达式方法,方法String.replaceAll和ArrayList如何将字符串拆分为标记,但忽略引号内存在的定界符? 分隔符是不是字母数字或带引号的文本的任何字符

例如:字符串:

你好^世界'这*有两个令牌'

应该输出:

  • 你好
  • worldthis *有两个令牌

我知道已经有一个该死的好答案,但是我想添加另一个基于正则表达式的方法(我可以说更简单),使用任何非字母数字分隔符来拆分给定文本,该分隔符不在使用单引号的情况下

正则表达式:

/(?=(([^']+'){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]

演示:

Here is a live working Demo of the above code.

您无法以任何合理的方式。 您提出了一个问题,即正则表达式不擅长。

使用Matcher来标识要保留的部分,而不是要拆分的部分:

String s = "hello^world'this*has two tokens'";
Pattern pattern = Pattern.compile("([a-zA-Z0-9]+|'[^']*')+");
Matcher matcher = pattern.matcher(s);
while (matcher.find()) {
    System.out.println(matcher.group(0));
}

看到它在线上工作: ideone

请勿为此使用正则表达式。 它不会工作。 使用/编写解析器。

您应该使用正确的工具完成正确的任务。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM