Java 正则表达式 : Add quotes to start and end of string if missing

标签 java regex

我想创建一个简单的正则表达式,以将双引号 " 添加到字符串的开头或结尾(如果使用 Java 字符串实际上缺少这些双引号)。 ReplaceAll 方法。

到目前为止,这是我最好的尝试:

string.replaceAll("(^[^\"])($)(?<!\")", "\"$1$2\"");

单独使用时效果很好,但组合起来就不行了:

string.replaceAll("(^[^\"])", "\"$1");
string.replaceAll("($)(?<!\")", "$2\"");

Example

有人可以指出我做错了什么吗?

提前致谢,

乔波

最佳答案

当您使用(^[^\"])($)(?<!")时,您匹配除 " 之外的任何字符在字符串的开头,并且您要求字符串的结尾出现在该字符之后,然后执行额外检查以确保该字符不是 " (因此,最后的回顾是完全多余的)。

如果需要添加"在开始或结束处,其中第一个/最后一个字符不是 " ,您需要使用交替:

s=s.replaceAll("^(?!\")|$(?<!\")", "\"");

参见this regex demo .

详细信息

  • ^(?!\") - 如果没有 " 则匹配字符串的开头在开始时
  • | - 或
  • $(?<!\") - 匹配字符串末尾并检查是否有 "最后,如果有 " 则失败在那里。

如果你想用 " 包裹整个字符串如果没有" s 围绕字符串,使用

s=s.replaceFirst("(?s)^[^\"](?:.*[^\"])?$", "\"$0\"");

或者更简单的非正则表达式方法,带有字符串连接和几个 startsWithendsWith :

if (!s.endsWith("\"") && !s.startsWith("\"")) {
    System.out.println("\"" + s + "\"");
}

参见this Java demopattern here意思是

  • (?s)^ - 启用Pattern.DOTALL标记并匹配字符串的开头
  • [^\"] - 除 " 之外的任何字符
  • (?:.*[^\"])? - 任何 0+ 个字符以及除 " 之外的任何字符的可选序列(如果字符串只有 1 个字符怎么办?) ...
  • $ - 在字符串的末尾。

$0代表整个匹配值。

关于Java 正则表达式 : Add quotes to start and end of string if missing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50816222/

相关文章:

Java语法问题

regex - 为什么我的 Emacs 正则表达式不与 ^ 匹配行的开头?

正则表达式排除某些内容并批量重命名文件

regex - 是否可以使用正则表达式作为变量在 sublime 文本中进行查找和替换?

java - 使用正则表达式分割字符在java中返回空值

Java 时钟项目 - 勾选方法输出 "0"而不是 "00"分钟和秒,修复 AM PM 的输出

java - 帮助 Hibernate 集合外键映射

java - 在 Java 中舍入负数

java - Spring JWT - 添加自定义声明

正则表达式,提取字符串末尾的单词和数字