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

1

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

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

PartOne
PartTwo
PartThree
PartFour
PartFive
...
PartOneHundred

Что я хочу:

Part1
Part2
Part3
Part4
Part5
...
Part100

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

tomysshadow
источник
Что будет PartOneHundredAndOne? Я предполагаю 101, но у вас есть "и" в ваших строках?
Дейв

Ответы:

0

Прямо в 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», будут преобразованы в числовые, тогда как строки, которые не будут проходить прямо через. Например, добавив пару строк в ваш пример, я получил следующий вывод из моего скрипта:

Part1
ignore
Part2
Part3
Part4
keep in place
Part5
Part100
okay

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

PeterCJ
источник
На самом деле я обнаружил и заменил текст «двадцать» на 2, «тридцать» на 3, а затем «три» на 3 и «четыре» на 4 и т. Д. И исправил все оставшиеся ошибки, такие как с 10-19 вручную. Это также возможное решение.
tomysshadow