Это может быть выражение, которое мы можем искать здесь, но не правильный метод:
"(.*?)",([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
RegEx Circuit
jex.im визуализирует регулярные выражения: