[英]Regex to replace single quote with single quote twice if it is inside <xsl: or <XSL:
[英]Replace single quote with double quote with Regex
我有一個接收到格式錯誤的JSON字符串的應用,如下所示:
{'username' : 'xirby'}
我需要更換單引號'
雙quoates "
遵循以下規則(我認為):
{
有一個或多個空格 :
:
還有一個空格 }
因此,此字符串{'username' : 'xirby'}
或
{ 'username' : 'xirby' }
將被轉換為:
{"username" : "xirby"}
更新:
還有可能是格式錯誤的JSON字符串:
{ 'message' : 'there's not much to say' }
在此示例中,不應替換消息值內的單引號。
最好不要使用JSON解析器,該解析器可以讀取此類格式錯誤的JSON並為您“標准化”。 傑克遜可以做到:
final ObjectReader reader = new ObjectMapper()
.configure(Feature.ALLOW_SINGLE_QUOTES, true)
.reader();
final JsonNode node = reader.readTree(yourMalformedJson);
// node.toString() does the right thing
該正則表達式將捕獲所有適當的單引號和相關的空格,而忽略消息中的單引號。 可以使用雙引號替換捕獲的字符,同時保留JSON格式。 它也可以推廣到JSON字符串與多個消息(用逗號分隔,
)。
((?<={)\s*\'|(?<=,)\s*\'|\'\s*(?=:)|(?<=:)\s*\'|\'\s*(?=,)|\'\s*(?=}))
我知道您標記了Java的問題,但我對python更為熟悉。 這是一個示例示例,說明如何在python中將單引號替換為雙引號:
import re
regex = re.compile('((?<={)\s*\'|(?<=,)\s*\'|\'\s*(?=:)|(?<=:)\s*\'|\'\s*(?=,)|\'\s*(?=}))')
s = "{ 'first_name' : 'Shaquille' , 'lastname' : 'O'Neal' }"
regex.sub('"', s)
> '{"first_name":"Shaquille","lastname":"O\'Neal"}'
此方法使用前向和后向運算在符號{},:
旁邊查找單引號{},:
String test = "{'username' : 'xirby'}";
String replaced = test.replaceAll("'", "\"");
如果您希望完全滿足所有這些條件,請嘗試以下操作:
'{(\s)?\'(.*)\'(\s)?:(\s)?\'(.*)\'(\s)?}'
正如您的正則表達式。 它使用(\\ s)? 匹配一個或零個空格字符。
關於您問題的標簽是JAVA ,我用JAVA回答了。
首先導入庫:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
然后:
Pattern p = Pattern.compile("((?<=(\\{|\\[|\\,|:))\\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+"]}
我建議您使用JSON解析器而不是REGEX。
String strJson = "{ 'username' : 'xirby' }";
strJson = new JSONObject(strJson).toString();
System.out.println(strJson);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.