我想创建一个简单的正则表达式,以将双引号 "
添加到字符串的开头或结尾(如果使用 Java
字符串实际上缺少这些双引号)。 ReplaceAll
方法。
到目前为止,这是我最好的尝试:
string.replaceAll("(^[^\"])($)(?<!\")", "\"$1$2\"");
单独使用时效果很好,但组合起来就不行了:
string.replaceAll("(^[^\"])", "\"$1");
string.replaceAll("($)(?<!\")", "$2\"");
有人可以指出我做错了什么吗?
提前致谢,
乔波
最佳答案
当您使用(^[^\"])($)(?<!")
时,您匹配除 "
之外的任何字符在字符串的开头,并且您要求字符串的结尾出现在该字符之后,然后执行额外检查以确保该字符不是 "
(因此,最后的回顾是完全多余的)。
如果需要添加"
在开始或结束处,其中第一个/最后一个字符不是 "
,您需要使用交替:
s=s.replaceAll("^(?!\")|$(?<!\")", "\"");
参见this regex demo .
详细信息
-
^(?!\")
- 如果没有"
则匹配字符串的开头在开始时 -
|
- 或 -
$(?<!\")
- 匹配字符串末尾并检查是否有"
最后,如果有"
则失败在那里。
如果你想用 "
包裹整个字符串如果没有"
s 围绕字符串,使用
s=s.replaceFirst("(?s)^[^\"](?:.*[^\"])?$", "\"$0\"");
或者更简单的非正则表达式方法,带有字符串连接和几个 startsWith
和endsWith
:
if (!s.endsWith("\"") && !s.startsWith("\"")) {
System.out.println("\"" + s + "\"");
}
参见this Java demo 。 pattern 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/