java正则表达式单引号_关于Java:⽤Regex替换单引号和双
引号
我有⼀个接收到格式错误的JSON字符串的应⽤,如下所⽰:
{'username' : 'xirby'}
我需要将双引号"替换为单引号'
遵循以下规则(我认为):
{后带有⼀个或多个空格的单引号
位于⼀个或多个空格和:之前
在:之后有⼀个空格
位于⼀个或多个空格和}之前
因此,此字符串{'username' : 'xirby'}或
{ 'username' : 'xirby' }
将被转换为:
{"username" :"xirby"}
更新:
还有可能是格式错误的JSON字符串:
{ 'message' : 'there's not much to say' }
在此⽰例中,不应替换消息值内的单引号。
不要为此使⽤正则表达式,请参阅我的答案
该正则表达式将捕获所有适当的单引号和相关的空格,⽽忽略消息中的单引号。可以使⽤双引号替换捕获的字符,同时保留JSON格式。它还通⽤化为具有多个消息(以逗号,分隔)的JSON字符串。
((?<={)\s*\'|(?<=,)\s*\'|\'\s*(?=:)|(?<=:)\s*\'|\'\s*(?=,)|\'\s*(?=}))
我知道您标记了Java的问题,但我对python更为熟悉。这是⼀个⽰例⽰例,说明如何在python中将单引号替换为双引号:
import re
regex = repile('((?<={)\s*\'|(?<=,)\s*\'|\'\s*(?=:)|(?<=:)\s*\'|\'\s*(?=,)|\'\s*(?=}))')
s ="{ 'first_name' : 'Shaquille' , 'lastname' : 'O'Neal' }"
regex.sub('"', s)
> '{"first_name":"Shaquille","lastname":"O\'Neal"}'
此⽅法使⽤前向和后向操作在符号{},:旁边查单引号。
最好不要使⽤JSON解析器,该解析器可以读取此类格式错误的JSON并为您"标准化"。杰克逊可以做到:
final ObjectReader reader = new ObjectMapper()
.configure(Feature.ALLOW_SINGLE_QUOTES, true)
.reader();
final JsonNode node = adTree(yourMalformedJson);
// String() does the right thing
试试这个正则表达式:
\s*\'\s*
然后⽤"替换将完成此⼯作。看这⾥
String test ="{'username' : 'xirby'}";
String replaced = placeAll("'",""");
将a"b变成"a"b" ...
@flav我对replaceAll的担⼼是它可能会将单引号替换为单引号⽂本
@xybrek因此需要使⽤正确的JSON解析器...正则表达式只能做很多事情
关于您问题的标签是JAVA,我⽤JAVA回答了。
⾸先导⼊库:
import Matcher;
import Pattern;
然后:replaceall()
Pattern p = Patternpile("((?<=(\\{|\\[|\\,|:))\\s*')|('\\s*(?=(\\}|(\\])|(\\,|:))))");
String s ="{ 'firstName' : 'Malus' , 'lastName' : ' Ms'Malus' , marks:[ ' A+ ', 'B+']}"; String replace =""";
String o;
Matcher m = p.matcher(s);
o = m.replaceAll(replace);
System.out.println(o);
输出:
{"firstName":"Malus","lastName":" Ms'Malus", marks:[" A+ ","B+"]}
如果您希望完全满⾜所有这些条件,请尝试以下操作:
'{(\s)?\'(.*)\'(\s)?:(\s)?\'(.*)\'(\s)?}'
正如您的正则表达式。它使⽤( s)?匹配⼀个或零个空格字符。
我建议您使⽤JSON解析器⽽不是REGEX。
String strJson ="{ 'username' : 'xirby' }";
strJson = new JSONObject(strJson).toString();
System.out.println(strJson);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论