[英]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
以下適用於您的s1
和s2
示例:
(["']).*?\1
["']
匹配雙引號或單引號(被捕獲為一個組)。然后,我們匹配任何內容,然后匹配與開始引號匹配的結束引號(使用捕獲組\\1
)。我們使用非貪婪匹配.*?
這樣我們就不會使用結束語。
請注意,由於該模式中帶有引號,因此您需要使用三重引號:
val pattern = """(["']).*?\1""".r
更新以處理添加到問題的其他案例:
要同時處理逗號分隔的示例,您需要匹配單詞字符\\w
或空格\\s
組合,這些字符以逗號或行尾結尾,但使用前瞻字符(?=(,|$))
(["']).*?\1|\w(\w|\s)*(?=(,|$))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.