我有这个正则表达式用于分割字符串:
,(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)
e.g。串
“字段1”, “字段2”, “ITEM1,ITEM2,项目3”, “您好”, “约翰” “”
我理解的一件事是将字符串分开,但之后的任何事情我都不确定。
如果有人能解释这个正则表达式请。
如果你能将它解剖到最简单的水平,我将不胜感激。
答案 0 :(得分:4)
此正则表达式仅匹配逗号,
时,只有在双引号之外才能通过计算文字,
之后的偶数引号来匹配。
<强>解释强>
, -> match literal comma
(?=...) -> positive lookahead
[^"]*" -> match anything before a " followed by a literal "
[^"]*"[^"]*" -> match a pair of above
(?:[^"]*"[^"]*")* -> Match 0 or more of pairs (0, 2, 4, 6 sets)
[^"]*$ -> Followed by any non-quote till end of string
示例输入:
"Field1,Field2","Field3","item1,item2,item3"
,
之前与"Field3"
匹配,因为前瞻:(?=(?:[^"]*"[^"]*")*[^"]*$)
确保此逗号后有4个双引号。,
之后与"Field3"
匹配,因为前瞻:(?=(?:[^"]*"[^"]*")*[^"]*$)
确保此逗号后有两个双引号。Field1
和Field2
之间的逗号不匹配,因为之后的引号数在数字上是奇数,因此预告(?=(?:[^"]*"[^"]*")*[^"]*$)
将会失败。答案 1 :(得分:3)
,(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)
这不会在,
和"
内的"
上分开。这表示在每,
之后会有something " something"
组。所以有效,
不能介于"
和"
之间。