如何查找双引号"
所包围的所有字符串并将其替换为新字符串?
Input Output
----- ------
`Hello "User", what's up?` -> `Hello l("User"), what's up?`
`Regexes are "so complex"` -> `Regex are l("so complex")`
我如何用Java做到这一点?
答案 0 :(得分:3)
查找("[^"\n]+")
,替换为l($1)
:
str = str.replaceAll("(\"[^\"\n]+\")", "l($1)");
如果你想在引号中允许反斜杠转义,比如"These are \"Nested\" quotes"
你可以使用这样的表达式:
("(?:[^"\\\n]|\\.)*")
在Java中使用如下:
str = str.replaceAll("(\"(?:[^\"\\\\\n]|\\\\.)*\")", "l($1)");
答案 1 :(得分:2)
试试这个:
String newValue=oldValue.replaceAll("\"([^\"]*?)\"", "(\"$1\")");
答案 2 :(得分:1)
你基本上有两个问题。您尝试将内容(*
和\w
)放入不属于这些括号内的角色类中。您已经找到了预定义的字符类(\w
),因此您可以直接使用它:
"\w*" // These would be nested quotes, and I'm omitting escapes for clarity
这相当于:"[a-zA-Z_0-9]*"
当您进行替换时,您需要捕获匹配项,因此请使用括号来生成capturing group。下面的示例应该适合您的需求(包括转义等)。
String bro = "Hello \"bro\", what's \"up\"?";
String replaced = bro.replaceAll("(\"\\w*\")", "l($1)");
System.out.println(replaced); // prints: Hello l("bro"), what's l("up")?
如果您想在引号内捕获空格和标点符号,而不是仅使用单个未经中断的单词,则可以将\\w
替换为包含您关注的字符的字符类。根据您的操作的特定需求进行调整。如果您不想对内容进行歧视,可以使用[^\"]
(请注意需要转义"
)以匹配任何非双引号字符:
String bro = "Hello \"bro\", \"what's up\"?";
String replaced = bro.replaceAll("(\"[^\"]*\")", "l($1)");
System.out.println(replaced); // prints: Hello l("bro"), l("what's up")?