Найти линии с N вхождениями символа - PullRequest
3 голосов
/ 18 июня 2010

У меня есть текстовый файл, который я пытаюсь импортировать как простой файл в SQL2008, который выглядит следующим образом:

“123456”,”some text”
“543210”,”some more text”
“111223”,”other text”
etc…

Файл имеет более 300 000 строк, а текст большой (обычно 200-500 символов), поэтому сканирование файла вручную занимает очень много времени и подвержено ошибкам. Другие похожие (и даже более сложные файлы) были успешно импортированы.

Проблема с этим заключается в том, что «некоторые строки» содержат кавычки в тексте… (это произошло из экспорта из старой базы данных SuperBase, которая не позволяла вам указать квантификатор текста, я ничего не могу сделать с файл, кроме как очистить его и попытаться импортировать его).

Итак, «оскорбительные» строки выглядят так:

“123456”,”this text “contains” a quote”
“543210”,”And the “above” text is bad”
etc…

Вы можете увидеть проблему здесь.

Теперь, 300.000 - это не так уж много, если бы я мог выполнить поиск с помощью текстового редактора, который может использовать регулярные выражения, я бы вручную удалил кавычки из каждой строки. Проблема не в количестве оскорбительных строк, а в невозможности их найти с помощью простого поиска. Я уверен, что их меньше 500, но выложите их в текстовый файл размером 300 000 строк, и вы понимаете, о чем я.

Исходя из этого, что было бы лучшим регулярным выражением, которое я мог бы использовать для определения этих строк?

Моя первая мысль: скажите, какие строк содержат больше , чем 4 цитат («).

Но я ничего не мог придумать (я не очень хорош в Regex, кроме основ).

Ответы [ 3 ]

7 голосов
/ 18 июня 2010

этот шаблон ^("[^"]+){4,} будет соответствовать " строкам, содержащим более 4 кавычек "

вы можете поэкспериментировать с заменой 4 на 5 или более, в зависимости от ваших данных.

4 голосов
/ 18 июня 2010

Я думаю, что с Regex вы можете быть более прямым, чем вы планируете В зависимости от вашего диалекта Regex, что-то вроде этого должно сделать это:

^"\d+",".*".*"
1 голос
/ 18 июня 2010

Вы также можете использовать регулярное выражение для удаления внешних кавычек и использовать вместо этого лучший разделитель.Например, найдите ^"([0-9]+)","(.*)"$ и замените его на \1+++++DELIM+++++\2.

. Конечно, это не дает прямого ответа на ваш вопрос, но может решить проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...