Название: Выборка параметров из списка Отправлено: manarch от Апреля 25, 2012, 15:19 Доброго времени суток.
Помогите кто как может. В регулярных выражениях не очень Есть строка 'DATA.VALUE, SIZE, ",", REP' Нужно выделить из нее: DATA.VALUE SIZE ", " REP пробовал ', *' он "," делит на две кавычки удаляя ', '. ЗЫ "," - должен иметь именно такую форму потому что это в последствии вытягивается символ-разделитель Название: Re: Выборка параметров из списка Отправлено: kambala от Апреля 25, 2012, 18:32 тут никакие регулярки вовсе не нужны. вот пример на Qt (для std::string пишется аналогично):
Код
Название: Re: Выборка параметров из списка Отправлено: manarch от Апреля 26, 2012, 05:48 тут никакие регулярки вовсе не нужны. вот пример на Qt (для std::string пишется аналогично): Код
А если строка будет вида ("DATA.VALUE,SIZE,\",\", REP")? Если бы все было так просто я бы не спрашивал. Название: Re: Выборка параметров из списка Отправлено: alexis031182 от Апреля 26, 2012, 08:03 А если строка будет вида ("DATA.VALUE,SIZE,\",\", REP")? kambala Вам правильно подсказывает. Предложенный им вариант будет, во-первых, быстрее работать, а, во-вторых, для написания регулярки здесь особо не к чему прицепиться - разбиение всё равно идёт по запятой.Если бы все было так просто я бы не спрашивал. Код: QString s("DATA.VALUE, SIZE, \",\", REP"); Название: Re: Выборка параметров из списка Отправлено: Tonal от Апреля 26, 2012, 08:11 Разбор CSV на регулярках писать довольно грустно. Там ещё перевод строки может внутри заковыченного поля встретится.
Проще руками конечный автомат написать... Хотя ежели неймётся, то можно и регулярками поизвращатся (вот на python-е): Код В приведённом выражении не учитывается перевод строки внутри поля. Так же существует проблема последнего поля. Чтобы её честно решить нужно усложнить выражение, описав каким образом поле может встречаться в строке. Это увеличивает выражение ещё в 4 раза. :) Название: Re: Выборка параметров из списка Отправлено: kambala от Апреля 26, 2012, 12:04 тут никакие регулярки вовсе не нужны. вот пример на Qt (для std::string пишется аналогично): Код
А если строка будет вида ("DATA.VALUE,SIZE,\",\", REP")? Если бы все было так просто я бы не спрашивал. более упрощённый вариант без учёта кавычек: Код
Название: Re: Выборка параметров из списка Отправлено: manarch от Апреля 26, 2012, 12:29 тут никакие регулярки вовсе не нужны. вот пример на Qt (для std::string пишется аналогично): Код
А если строка будет вида ("DATA.VALUE,SIZE,\",\", REP")? Если бы все было так просто я бы не спрашивал. более упрощённый вариант без учёта кавычек: Код
Ну вообще то я сразу описал что кавычки должны. Т.е. любое вхождение запятой внутри кавычек не должно рассматриваться как разделитель параметров. Название: Re: Выборка параметров из списка Отправлено: kambala от Апреля 26, 2012, 13:26 ну тогда пользуйся вариантом Tonal
Название: Re: Выборка параметров из списка Отправлено: Igors от Апреля 26, 2012, 14:26 А если строка будет вида ("DATA.VALUE,SIZE,\",\", REP")? Так что у Вас кавычки (" или \") ? Если бы все было так просто я бы не спрашивал. Может я чего-то не понял, но никаких сложностей не увидел. Почему не написать на простом С? Зачем нужны какие-то хитро-деланные "регулярки" которые выглядят ужасно да еще и проваливаются на простой задачке? Название: Re: Выборка параметров из списка Отправлено: Tonal от Апреля 27, 2012, 08:39 В приведённом выражении не учитывается перевод строки внутри поля. Ага, одшло, как всё это подхватить:Так же существует проблема последнего поля. Код: >>> import re По мне так проще конечный автомат самому закодировать. Название: Re: Выборка параметров из списка Отправлено: Igors от Апреля 27, 2012, 11:02 По мне так проще конечный автомат самому закодировать. Мне понятно как разобрать строку, но что то за автомат/пулемет - хз :) Не могли бы Вы пояснить "во что это вольется" на простом С/C++ ? Название: Re: Выборка параметров из списка Отправлено: kambala от Апреля 27, 2012, 12:15 Тут есть правда некая заковыка: я не уверен, что Qt-шный движёк регэкспов всё это правильно сожрётъ. :) просмотр вперёд в Qt поддерживается, так что всё должно быть ок |