Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум на Исходниках.RU > RegExp > Как сделать пробел между цифрами и текстом |
Автор: sotex2 14.06.23, 17:19 |
Как сделать пробел с помощью регулярного выражения между цифрами и текстом. Например "01Растениеводство" сделать разделение меду 01 и Растениеводство, 01.1 и Выращивание, 01.11 и Выращивание зерновых, 01.11.1 и Выращивание зерновых культур. Пример кода ниже. Регулярное выражение будет вставляться в Sublime Text для разделения последней цифры от первой буквы. тип регулярки re:(\d+) 01Растениеводство и животноводство, охота и предоставление соответствующих услуг в этих областях 01.1Выращивание однолетних культур 01.11Выращивание зерновых (кроме риса), зернобобовых культур и семян масличных культур 01.11.1Выращивание зерновых культур 01.11.11Выращивание пшеницы 01.11.12Выращивание ячменя 01.11.13Выращивание ржи 01.11.14Выращивание кукурузы 01.11.15Выращивание овса 01.11.16Выращивание гречихи 01.11.19Выращивание прочих зерновых культур |
Автор: Qraizer 14.06.23, 18:33 |
Ну например <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> Строка замены просто((\d+\.?)+)([^0-9. ]\S+) <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> $1 $3 |
Автор: Majestio 14.06.23, 18:54 |
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> ([0-9\.]+)(.*) Тестировать тут. Если же нужно захватывать пробелы в начале строки, то вот так: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> ^([0-9\. ]+)(.*)$ Добавлено Цитата Qraizer @ Ну например ExpandWrap offLine numbers ((\d+\.?)+)([^0-9. ]\S+) Строка замены просто ExpandWrap offLine numbers $1 $3 Нет, твой регексп неправильный. Смотри. |
Автор: sotex2 14.06.23, 19:43 |
Первые 2, после цифр все удаляет, но третий код регулярки помог. Спасибо. |
Автор: Qraizer 14.06.23, 20:40 |
И что там неправильного? То, что я не буду вставлять пробел, когда он уже и так есть? Или то, что он индифферентен к параметру жадности по умолчанию? Я что-то не вижу по ссылке отличий. |
Автор: Majestio 14.06.23, 22:48 |
У тебя $3 не забирает всю оставшуюся часть строки, а только первое слово. |
Автор: Qraizer 15.06.23, 04:59 |
А надо разве? Поиск-то тоже не по всей строке идёт. Это ты решил расставить ^ с $ по бокам, у меня их нет. То, что не попало под регулярку, должно остаться неизменным. Оно и останется. Проверь Search and Replace в любом редакторе, хоть бы и в FARе. Хошь я тебе на Плюсах с <regex> продемонстрирую? Добавлено <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> #include <iostream> #include <string> #include <regex> using namespace std::literals; int main() { std::string str = "01.11.1Выращивание зерновых культур"; std::regex rg("((\\d+\\.?)+)([^0-9. ]\\S+)"s); std::string out = std::regex_replace(str, rg, "$1 $3"s); std::cout << out << std::endl; } <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> 01.11.1 Выращивание зерновых культур |
Автор: Majestio 15.06.23, 06:31 |
Цитата Qraizer @ А надо разве? Поиск-то тоже не по всей строке идёт. Это ты решил расставить ^ с $ по бокам, у меня их нет. То, что не попало под регулярку, должно остаться неизменным. Оно и останется. Проверь Search and Replace в любом редакторе, хоть бы и в FARе. Хошь я тебе на Плюсах с <regex> продемонстрирую? Ну, в принципе, для поиска-замены вся строка и не нужна. Ok, развидь, что я написал выше ![]() |
Автор: Qraizer 15.06.23, 13:35 |
Та не, в общем случае замечание резонное. Другое дело, что непонятно, действиетльно ли оно важно. |
Автор: Majestio 15.06.23, 21:21 |
![]() |