Название: Разбить строку Отправлено: andrew.k от Декабрь 12, 2010, 20:35 Подскажите как проще всего разбить строку вида "=1234567:1111111=2222222=3333333"
На четыре строки =1234567, :1111111, =2222222, =3333333. Пробую через split( QRegExp() ); Но то никак не могу составить правильный регэксп. Условия: цифр всегда 7. Перед цифрой идет символ. Либо "=" либо ":". Его нужно сохранить вместе с набором цифр. Самое простое решение разбить строку по 8 символов. Но как это сделать одной строчкой? :) QRegExp( "c{8}" ) не срабатывает. Название: Re: Разбить строку Отправлено: Sancho_s_rancho от Декабрь 12, 2010, 21:06 Зачем какие-то регулярные выражения, если вам достаточно в цикле разбить по 8 символов. Про одну строчку вообще не понял. Вас кто-то заставляет переходить на новую?
Название: Re: Разбить строку Отправлено: andrew.k от Декабрь 12, 2010, 23:01 я про одну строчку кода.
Регулярные выражения за тем, что это удобно. и потом, данные могут содержать ошибки, например, длина полей может быть некорректная (например, =111=1234567) например, будет не хватать одной или не одной цифры. Так что тупо разбивать по 8 символов нельзя. Понятно почему. Сейчас сделал так. split( QRegExp( "[=:]", QString::SkipEmptyParts ) получаю список ("=", "=") split( QRegExp( "\\d", QString::SkipEmptyParts ) получаю список ( "111", "1234567" ) В обоих списках элементы расположены соответственно друг другу. Это две строчки. Предложи свой лучший алгоритм. Либо не пиши бессмысленные посты. Название: Re: Разбить строку Отправлено: Sancho_s_rancho от Декабрь 13, 2010, 07:57 Условия: цифр всегда 7. Перед цифрой идет символ. Либо "=" либо ":". Его нужно сохранить вместе с набором цифр. Цитата: andrew.k и потом, данные могут содержать ошибки, например, длина полей может быть некорректная (например, =111=1234567) Цитата: andrew.k Либо не пиши бессмысленные посты. Так вы и не пишите бессмысленных постов, где каждый новый пост - новые условия, противоречащие предыдущим.Название: Re: Разбить строку Отправлено: kirill от Декабрь 14, 2010, 08:23 Код Output: ("=1234567", ":1111111", "=2222222", "=3333333") Название: Re: Разбить строку Отправлено: andrew.k от Декабрь 14, 2010, 12:32 Код Output: ("=1234567", ":1111111", "=2222222", "=3333333") Название: Re: Разбить строку Отправлено: kirill от Декабрь 14, 2010, 14:53 Вот! это то что, нужно. Спасибо, Кирилл. Только не очень понимаю как это работает. Конкретно второй параметр вызова replace split напрямую использовать не получится, потому что он выкидывает разделители. Поэтому в копии (QString(str)) строки делается замена с регэкспом. Второй параметр \\1 - это то что нашел регэксп в первых скобочках (они в принципе одни в выражении). То есть перед : или = вставляется , а потом по ней идет сплит. Название: Re: Разбить строку Отправлено: andrew.k от Декабрь 15, 2010, 11:10 Вот! это то что, нужно. Спасибо, Кирилл. Только не очень понимаю как это работает. Конкретно второй параметр вызова replace split напрямую использовать не получится, потому что он выкидывает разделители. Поэтому в копии (QString(str)) строки делается замена с регэкспом. Второй параметр \\1 - это то что нашел регэксп в первых скобочках (они в принципе одни в выражении). То есть перед : или = вставляется , а потом по ней идет сплит. в документации написано, второй параметр это на что заменить. Если регэксп, то почему параметр идет как QString? Название: Re: Разбить строку Отправлено: kirill от Декабрь 15, 2010, 12:36 Это все я понял, я не понял что такое \\1 это регэксп? или команда для split Я так понимаю, что строка просто подставляется в регэксп, который идет первым параметром.в документации написано, второй параметр это на что заменить. Если регэксп, то почему параметр идет как QString? В регулярных выражениях для перл это выглядело бы как Код: (\=|\:)\,/$1/ Название: Re: Разбить строку Отправлено: andrew.k от Декабрь 15, 2010, 17:57 Условия: цифр всегда 7. Перед цифрой идет символ. Либо "=" либо ":". Его нужно сохранить вместе с набором цифр. Цитата: andrew.k и потом, данные могут содержать ошибки, например, длина полей может быть некорректная (например, =111=1234567) Цитата: andrew.k Либо не пиши бессмысленные посты. Так вы и не пишите бессмысленных постов, где каждый новый пост - новые условия, противоречащие предыдущим. |