簡體   English   中英

用正則表達式拆分復雜的字符串

[英]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.

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