Perl: извлечение различных шаблонов из строки - PullRequest
0 голосов
/ 28 января 2019

Я хотел бы извлечь шаблоны в соответствии с a[a-z] из длинной строки и вывести только различные значения.Например, для следующей строки в $x

perl -e "$x = 'abx1acy2acz3ab'";

Результаты должны быть такими:

ab
ac

Проблема: не существует правила для разделениязапись / строка в массив, который облегчает извлечение шаблона.

Ответы [ 3 ]

0 голосов
/ 28 января 2019

Если вам нужны уникальные данные, попробуйте использовать хеш.

#!/usr/bin/perl

use strict;
use warnings;
use feature 'say';

$_ = 'abx1acy2acz3ab';
my %seen;

for (/(a[a-z])/g) {
  say $_ unless $seen{$_}++;
}
0 голосов
/ 28 января 2019

Еще один однострочный Perl

$ perl -le ' $x="abx1acy2acz3ab" ;%kv=$x=~/(a[a-z])((?<=.))/g; $,="\n"; print keys %kv '
ac
ab

$

с другим входом:

$  perl -le ' $x="abxaxy2acz3ab" ; %kv=$x=~/(a[a-z])((?<=.))/g; $,="\n"; print keys %kv '
ax
ab
ac

$
0 голосов
/ 28 января 2019

Вы получите различные шаблоны для этого регулярного выражения (если вас не волнует их порядок):

(a[a-z])(?!.*\1)

нажмите для демонстрации

Объяснение:

  • (a[a-z]) - соответствует букве a, за которой следует любая другая буква в диапазоне a-z.Содержимое заносится в Группу 1
  • (?!.*\1) - отрицательный прогноз, чтобы убедиться, что содержимое группы 1 не присутствует позже в строке.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...