Удалить альфа-символы из суффикса строки Perl Regex - PullRequest
1 голос
/ 26 февраля 2011

Как удалить альфа-суффикс из строки?Т.е.

AA12412BB Должен возвращать AA12412

, в основном, смотря справа налево, удаляя любые символы после последнего числового символа

Ответы [ 4 ]

5 голосов
/ 26 февраля 2011

Попробуйте это: $line =~ s/\D+\z//;

4 голосов
/ 26 февраля 2011

Если строка в $_:

s/\D+?$//;

[EDIT]: Следует использовать не жадное сопоставление (+?), если строка может заканчиваться \n, чтобы избежать удаления этого символа (спасибо DanD за это указание) , Это работает, потому что $ будет соответствовать либо концу строки, либо непосредственно перед \n в конце строки.

При работе со строками текста, как правило, рекомендуется сначала удалить любой конечный \n, вызвав chomp(), затем выполнить любую необходимую работу и, наконец, добавить \n, когда строка записана , Это упрощает обработку суффиксов и вычисление длины строки и является достаточно полезным, поскольку perl предоставляет опцию -l для автоматизации процесса для однострочников. В этом случае можно использовать более простой s/\D+$//;:

perl -lpe "s/\D+$//" < in.txt > out.txt
0 голосов
/ 26 февраля 2011

s/[A-Za-z]{2}$//;

Или, если вам нужна однострочная строка, введите это в командной строке DOS:

perl -pe "s/[A-Za-z]{2}$//" <a.txt >b.txt

При этом удаляются 2 буквенных символа в конце каждой строки в a.txt и сохраняются новые данные в b.txt

Если строка не заканчивается двумя буквенными символами, то строка не изменяется. Если b.txt еще не существует, он создается. Если b.txt существует, то любое старое содержимое в b.txt уничтожается. a.txt и b.txt должны находиться в каталоге, в котором вы находитесь, когда вы набираете однострочник, например если вы находитесь в C: \ users, когда вы набираете однострочную строку, а a.txt и b.txt также должны быть в C: \ users

0 голосов
/ 26 февраля 2011

Попробуйте:

$str =~ s/(?<=\d)\D+//;

Возможно, вы захотите добавить туда \b, если в строке несколько целей:

$str =~ s/(?<=\d)\D+\b//;

Если вы хотите повлиятьпоследнее совпадение в строке, вы можете использовать $ вместо:

$str =~ s/(?<=\d)\D+$//;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...