Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.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
Цитата Qraizer @
И что там неправильного?

У тебя $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, развидь, что я написал выше 8-)

Автор: Qraizer 15.06.23, 13:35
Та не, в общем случае замечание резонное. Другое дело, что непонятно, действиетльно ли оно важно.

Автор: Majestio 15.06.23, 21:21
:-?

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)