我有一个输入字符串
this或“that or”或'this or that'
应该翻译成
这个|| “那或”|| “这或那个”
因此尝试在字符串中查找字符串(或)的出现并将其替换为另一个字符串(||)。我试过以下代码
Pattern.compile("( or )(?:('.*?'|\".*?\"|\\S+)\\1.)*?").matcher("this or \"that or\" or 'this or that'").replaceAll(" || ")
输出
这个|| “那或”|| '这||那
问题是单引号中的字符串也被替换了。 至于代码,样式只是一个例子。我会编译模式并在我开始工作时重复使用它。
答案 0 :(得分:10)
试试这个正则表达式: -
"or(?=([^\"']*[\"'][^\"']*[\"'])*[^\"']*$)"
匹配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)*[^\"']*$)", "||");