относительно извлечения подстрок из существующих строк, следуя заданному шаблону - PullRequest
0 голосов
/ 02 февраля 2012

У меня есть набор строк, которые показывают следующий шаблон:

AB01234-01B
BC4567-02C

Я хочу извлечь подстроку из этих строк, сохраняя только средние цифры.

Например,для первого мне нужно только 1234 и удалить AB0 и -01B

для второго мне нужно только 4567. Как достичь этой цели в perl

Ответы [ 3 ]

1 голос
/ 02 февраля 2012

Это регулярное выражение будет работать для вас:

's/^[a-z0]+(\d+).*$/\1/i'

Пояснение:

^       - start of the text
[a-z0]+ - match 1 or more of a-z alphabets or number 0
\d+     - match 1 or more decimal number
(\d+)   - group these numbers to be back referenced later
.*      - match 0 or more any characters
$       - end of text
\1      - replace with back reference # 1 which is what we have in brackets (\d+)
/i      - ignore case

Таким образом, в строке AB01234-01B он группирует 1234 вместе, используя (\ d +) после сопоставления AB0, и заменяет всю строку на 1234.

1 голос
/ 02 февраля 2012
echo "AB01234-01B\nBC4567-02C"|perl -nle 'm{0*(\d+)} and print $1'
1234
4567
0 голосов
/ 02 февраля 2012

Если правило состоит в том, чтобы удалять только начальные нули, самый простой способ - позволить perl преобразовать строку в число, так как "0123" станет 123.

while(<DATA>) {
    say 0+$_ for /(\d+)/;
}

__DATA__
AB01234-01B
BC4567-02C

Или как подпрограмма:

sub extract {
    return 0+$1 if ($_[0] =~ /(\d+)/);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...