我从一个来源收到一些非常难看的数据,需要用正则表达式来解决这个问题。要求提供程序清理数据源是不可能的。我的数据如下:
string 1,string 2 ,," string,4",string 5
正如我所看到的,这里有两个复杂因素。我需要匹配第3个字段中的空字符串,我需要捕获"字符串,4"作为第四场。最困难的部分一直在试图弄清楚如何处理引号中的逗号。我一直在玩前瞻/后视断言,但没有多少运气。此外,虽然我不是肯定的,但我需要假设任何字段都可以随时引用并期望下面的一行,而不是期望它是一致的:
string 1," string,2" ,, string 4,string 5
有人有建议吗?
答案 0 :(得分:1)
这对我来说效果很好。如果需要改进,请告诉我
((?:".*?")|[^,"]*)
答案 1 :(得分:1)
我不确定我是否理解正确,但可能会使用The Regex Trick的变体
"[^"]*"|\w[^",]*
See test at regex101;使用PCRE如果要捕获引号内的内容,请使用branch reset:
(?|"([^"]*)"|(\w[^",]*))
答案 2 :(得分:1)
for key, val in mydict.items():
val1, val2, val3 = val
if val2 == 'awesome match':
new_var = val1
这完全符合您的要求 你可以在https://regex101.com/r/bZ8xM8/1
查看