如何找到被引号括起来的字符串并将其替换为内联?

时间:2014-06-05 16:06:02

标签: java regex

如何查找双引号"所包围的所有字符串并将其替换为新字符串?

Input                           Output
-----                           ------
`Hello "User", what's up?`  ->  `Hello l("User"), what's up?`
`Regexes are "so complex"`  ->  `Regex are l("so complex")`

我如何用Java做到这一点?

3 个答案:

答案 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")?