簡體   English   中英

在scala中解析字符串中的引號

[英]Parsing quotes in string in scala

我正在嘗試解析以下字符串

val s1 = """ "foo","bar", "foo,bar" """

而我希望這種解析是...

 List[String] ["foo","bar","foo,bar"] length 3

我可以解析以下內容

val s2 = """ "foo","bar", 'foo,bar' """

通過使用以下模式

val pattern = "(('[^']*')|([^,]+))".r

 pattern.findAllMatchIn(s2).map(_.toString).toList
 gives  ["foo","bar", 'foo,bar'] :length 3

編輯目前我能夠解析:“ foo,bar,foo bar” => [foo,bar,foo bar“]” foo,bar,'foo bar'“ => [foo,bar,'foo bar'] / / len 3

我也想解析這些行。

但是我無法弄清楚s2的模式。請注意,我需要同時解析s1和s2

目前,我能夠解析:

"foo,bar,foo bar" => [foo,bar,foo bar"]
    "foo,bar, 'foo bar' " => [foo, bar , 'foo bar'] //len 3

我也想解析這些行..以及以下行:

 """ foo, bar, "foo,bar" """ // gives [foo,bar,"foo,bar"] len 3

以下適用於您的s1s2示例:

(["']).*?\1

["']匹配雙引號或單引號(被捕獲為一個組)。然后,我們匹配任何內容,然后匹配與開始引號匹配的結束引號(使用捕獲組\\1 )。我們使用非貪婪匹配.*?這樣我們就不會使用結束語。

請注意,由於該模式中帶有引號,因此您需要使用三重引號:

val pattern =  """(["']).*?\1""".r

更新以處理添加到問題的其他案例:

要同時處理逗號分隔的示例,您需要匹配單詞字符\\w或空格\\s組合,這些字符以逗號或行尾結尾,但使用前瞻字符(?=(,|$))

(["']).*?\1|\w(\w|\s)*(?=(,|$))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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