Разбор текста и разбиение текста, включая / исключая кавычки - PullRequest
2 голосов
/ 25 февраля 2010

Мой вопрос почти идентичен предыдущей записи, которую я нашел здесь, но не совсем.

Мне нужно проанализировать текстовый файл, где данные структурированы следующим образом: Каждый элемент в файле начинается с #, за которым следует метка. Поля в сообщении разделены одним или несколькими пробелами.

Вот часть, с которой у меня проблемы. Каждое поле может или не может быть заключено в кавычки, это требуется только в том случае, если данные содержат пробелы.

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

В настоящее время я использую отдельное регулярное выражение для каждой метки, но тогда было бы гораздо эффективнее сразу разделить его при чтении из файла. Что касается примера учетной записи ниже (^#[A-z]+)\s([0-9]+)\s(.+)

Пример данных

#ACCOUNT 7059 "Misc. travelexpenses"
#ADRESS "M. Jackson" "somewhere over the rainbow" WI53233-1704 555-12345

1 Ответ

0 голосов
/ 25 февраля 2010

Вы можете использовать конструкцию «ИЛИ», чтобы определить возможные формы полей. Как

([A-z]+|"[^"]+") 

соответствует как Kring, так и "Mr. Kring".

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

(?:^#|\s+)([^"#\s]+|"[^"]+")

http://gskinner.com/RegExr/ - хороший способ проверки регулярных выражений.

...