簡體   English   中英

用正則表達式將單引號替換為雙引號

[英]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'  }

在此示例中,不應替換消息值內的單引號。

試試這個正則表達式:

\s*\'\s*

然后調用"替換為"就可以了。請看這里

最好不要使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM