Java正则表达式:如果缺少,则在字符串的开头和结尾添加引号
我想创建一个简单的正则表达式,在使用Java正则表达式:如果缺少,则在字符串的开头和结尾添加引号,java,regex,Java,Regex,我想创建一个简单的正则表达式,在使用Javastring.replaceAll方法时,在字符串的开头或结尾添加双引号“ 到目前为止,这是我最好的尝试: string.replaceAll("(^[^\"])($)(?<!\")", "\"$1$2\""); string.replaceAll((^[^\”)($)(?当您使用(^[^\”)($)(?在字符串的开头,并且您要求字符串的结尾显示在该字符的后面,然后执行额外的检查,确保该字符不是“(因此,末尾的后视是完全冗余的) 如果需要在第一
Java
string.replaceAll
方法时,在字符串的开头或结尾添加双引号“
到目前为止,这是我最好的尝试:
string.replaceAll("(^[^\"])($)(?<!\")", "\"$1$2\"");
string.replaceAll((^[^\”)($)(?当您使用(^[^\”)($)(?在字符串的开头,并且您要求字符串的结尾显示在该字符的后面,然后执行额外的检查,确保该字符不是“
(因此,末尾的后视是完全冗余的)
如果需要在第一个/最后一个字符不是“
的开始或结束处添加”
,则需要使用替代选项:
s=s.replaceAll("^(?!\")|$(?<!\")", "\"");
或者是一种更简单的非正则表达式方法,使用字符串连接和一对startsWith
和endsWith
:
if (!s.endsWith("\"") && !s.startsWith("\"")) {
System.out.println("\"" + s + "\"");
}
看,方法是什么
(?s)^
-启用模式.DOTALL
标记并匹配字符串的开头
[^\”]
-除“
(?:.[^\“])?
-一个可选序列(如果一个字符串只有1个字符?),包含任何0+字符,然后是除“
”以外的任何字符
$
-在字符串末尾
$0
代表整个匹配值。为什么需要正则表达式来实现这一点?@Biffen,($)
应该指示字符串的结尾,对吗?@Prashant,你为什么要问,如果(!s.endsWith(…)…)…
提供更好的性能?-Regex倾向于提供简洁的代码,不会分散用户的主要目的和逻辑method@Chopo87你是对的,但这是一个非常简单的用例,不需要复杂的正则表达式来解决完美的问题!非常感谢@wiktor stribizew
s=s.replaceFirst("(?s)^[^\"](?:.*[^\"])?$", "\"$0\"");
if (!s.endsWith("\"") && !s.startsWith("\"")) {
System.out.println("\"" + s + "\"");
}