[英]Split complex string with a regex
我有一個字符串:
(3592, -1, 7, N'SUNWopensp-root', N'1.5,REV=10.0.3.2004.12.15.14.19', N'Sun Microsystems, Inc.', N'The OpenJade Group''s SGML and XML parsing tools - platfowrm independent files, / filesystem', N'SunPackage', abc, 83)
我需要在逗號上分割它,但不要在N'...'子串中分開。
我設法用這個提取N' ... '
字符串的所有內容:
N\'(.*?)(?:\',|\)|\'\))
但是這並沒有在逗號"3592, -1, 7"
等上分開,而我不能單獨用逗號分割,因為它用逗號分隔N' ... '
字符串。 最終目標是將所有字段分成逗號除了N' ... '
字符串中的字符串(即N'.. , ..'
應該是一個完整的字段)。
given_string.scan(/(?:(?:N'.*?')|[^,])+/)
得到:
[
"(3592",
" -1",
" 7",
" N'SUNWopensp-root'",
" N'1.5,REV=10.0.3.2004.12.15.14.19'",
" N'Sun Microsystems, Inc.'",
" N'The OpenJade Group''s SGML and XML parsing tools - platfowrm independent files",
" / filesystem'",
" N'SunPackage'",
" abc",
" 83)"
]
這看起來很不尋常,因為它包含空格和括號,並且'
單詞內部的字符作為字段N'...'
的分隔符N'...'
,但由於這是問題中提到的內容,這就是我給出的內容。 如果這不是你想要的,那就歸咎於問題的邋。。
由於這接近CSV格式,這是解析它的一種方法。
#remove parens and N's
csv = str.gsub(/^\(|\)$/, "").gsub(/, N/, ",")
CSV.parse_line(csv, {:quote_char => "'"})
輸出:
[
"3592",
" -1",
" 7",
"SUNWopensp-root",
"1.5,REV=10.0.3.2004.12.15.14.19",
"Sun Microsystems, Inc.",
"The OpenJade Group's SGML and XML parsing tools - platfowrm independent files,
/ filesystem",
"SunPackage",
" abc",
" 83"
]
注意:這是正確處理雙重撇號的唯一解決方案。
你已經提取了N'個字段,現在你可以將它們變成類似X的東西,用逗號分割它們並用你的N'字段替換X. 這不是解決方案,但有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.