4

我有一个输入字符串

这个或“那个或”或“这个或那个”

应该翻译成

这个|| “那个或” || “这个或那个”

因此,尝试是在字符串中查找字符串 ( or ) 的出现,并将其替换为另一个字符串 ( || )。我试过下面的代码

Pattern.compile("( or )(?:('.*?'|\".*?\"|\\S+)\\1.)*?").matcher("this or \"that or\" or 'this or that'").replaceAll(" || ")

输出是

这个|| “那个或” || '这个 || 那'

问题是单引号中的字符串也被替换了。至于代码,样式只是一个例子。当我让它工作时,我会编译模式并重用它。

4

1 回答 1

10

试试这个正则表达式: -

"or(?=([^\"']*[\"'][^\"']*[\"'])*[^\"']*$)"

它匹配orwhich 后跟任意字符,后跟一定数量的or,后跟任意字符直到结束。"'

String str = "this or \"that or\" or 'this or that'";
str = str.replaceAll("or(?=([^\"']*[\"'][^\"']*[\"'])*[^\"']*$)", "||");        
System.out.println(str);

输出 : -

this || "that or" || 'this or that'

or如果和 不匹配,"上述正则表达式也将替换'

例如: -

"this or \"that or\" or \"this or that'"

它也将替换or上述字符串。如果您不希望它在上述情况下被替换,您可以将正则表达式更改为: -

str = str.replaceAll("or(?=(?:[^\"']*(\"|\')[^\"']*\\1)*[^\"']*$)", "||");
于 2012-12-06T08:56:56.880 回答