我的正则表达式不能正确处理一行中的逗号。
if line =~ /^.*,(\d{4}-\d{2}-\d{2}),(\d+:\d+),.*,(\d+),.*,(.*) && (.*),Other,Other.*$/
我正在逐行读取一个看起来像这样的文件:
"",2019-06-14,01:30,,27,"",Episode Name && Series Name,Other,Other,LOCAL
但是,如果系列名称中包含逗号,例如。 “ Busy Electron,The”,正则表达式将仅捕获“ The”,而不是整个名称。
答案 0 :(得分:1)
这可能是我们在此处搜索的表达式,但不是正确的方法:
"(.*?)",([0-9]{4}-[0-9]{2}-[0-9]{2})\s*,([0-9]{2}:[0-9]{2}),(.*?),([0-9]+),"(.*?)",(.*?),(.*?),(.*?),(.*)
不包括最后一个字段,我们只为那些我们不想验证的字段实现一个惰性量词(.*?)
。
(.*)?
不起作用,因为它会使整个捕获组变得懒惰,而不是.*
。
在此之前,它将到达?
,.*
已经将我们的字符串刷到末尾并收集了除换行符以外的所有字符。
如果我们希望增加或减少约束,可以这样做,例如:
"(.*?)",\s*([0-9]{4}-[0-9]{2}-[0-9]{2})\s*,\s*([0-9]{2}:[0-9]{2})\s*,(.*?),\s*([0-9]+)\s*,"(.*?)",(.*?),(.*?),(.*?),(.*)
re = /"(.*?)",([0-9]{4}-[0-9]{2}-[0-9]{2})\s*,([0-9]{2}:[0-9]{2}),(.*?),([0-9]+),"(.*?)",(.*?),(.*?),(.*?),(.*)/m
str = '"",2019-06-14,01:30,,27,"",Episode Name && Series Name,Other,Other,LOCAL
"some things we wish here",2019-06-14,01:30,some things we wish here,27,"some things we wish here",Episode Name && Series Name,Other,Other,LOCAL'
# Print the match result
str.scan(re) do |match|
puts match.to_s
end
jex.im可视化正则表达式: