Найти и заменить числовые названия цифрами

Найти и заменить числовые названия цифрами

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

Что у меня есть:

PartOne
PartTwo
PartThree
PartFour
PartFive
...
PartOneHundred

Что я хочу:

Part1
Part2
Part3
Part4
Part5
...
Part100

Есть идеи, как это сделать в Notepad++ или подобном? Было бы очень долго заменять их все вручную. Кажется, это должно быть легкой задачей, но я не могу найти ничего подобного в своих поисках.

решение1

Напрямую в Notepad++, я сомневаюсь. Преобразование текста в число требует много логики, и даже супер-навороченные регулярные выражения, вероятно, не справятся с этой задачей.

Если они действительно последовательны (как в вашем примере) и действительно смежны (как в вашем примере), я бы, вероятно, просто перестроил их в своей любимой электронной таблице, а затем скопировал/вставил из ColumnB в Notepad++:

# | ColumnA  | ColumnB
1 | =row()   | ="Part"&A1
2 | =row()   | ="Part"&A2
...

Если вы готовы использовать скриптовый язык, Perl имеетLingua::EN::Words2Numsмодуль, который поможет облегчить вам жизнь

cat source.txt | perl -MLingua::EN::Words2Nums -e "while (<>) { if(/^Part/) { s/^Part//; print 'Part' . words2nums($_) . qq{\n}; } else { print $_; }; } " > destination.txt

Этот скрипт включает в себя функцию, которая позволяет преобразовывать строки, начинающиеся с "Part", в числовые, тогда как строки, которые не начинаются с "Part", просто проходят напрямую. Например, добавив пару строк в ваш пример, я получил следующий вывод из моего скрипта:

Part1
ignore
Part2
Part3
Part4
keep in place
Part5
Part100
okay

Меня не удивит, если в Python есть похожий модуль (или как там Python называет эквивалент модулей Perl). Если вам удобнее работать с Python, я бы пошел этим путем, потому что тогда вы сможете напрямую встраиваться в Notepad++, используя модуль PythonScript, и не придется делать File-IO в скрипте.

Связанный контент