Извлеките окружающие слова вместе с совпадением
75
7
Я ищу все случаи поиска, например. ddd
, в файле и вывести окружение, например:
File.txt
aaa bbb ccc ddd eee fff
ttt uuu iii eee ddd
ddd
ggg jjj kkk ddd lll
Выход
ccc ddd eee
eee ddd
ddd
kkk ddd lll
В качестве отправной точки я использую этот фрагмент кода
#!/usr/bin/perl -w
while(<>) {
while (/ddd(\d{1,3}))/g) {
print "$1\n"
}
}
спросил(а)
2021-01-19T19:54:42+03:00
2 месяца, 3 недели назад
добавить комментарий
пожаловаться
Решение
87
Вы можете попробовать следующее: он дает требуемый результат:
while(<>) {
if(/((?:\w+ )?ddd(?: \w+)?)/) {
print "$1\n";
}
}
Используемое выражение:
( # open the grouping.
(?:\w+ )? # an optional word of at least one char followed by a space.
ddd # 'ddd'
(?: \w+)? # an optional space followed by a word of at least one char.
) # close the grouping.
ответил(а)
2021-01-19T19:54:42+03:00
2 месяца, 3 недели назад
добавить комментарий
пожаловаться
62
#!/usr/bin/perl -w
while (<>) {
if (/((?:[a-z]{3} )?ddd(?: [a-z]{3})?)/)
print "$1\n";
}
ответил(а)
2021-01-19T19:54:42+03:00
2 месяца, 3 недели назад
добавить комментарий
пожаловаться
62
while (<>) {
chomp;
my @words = split;
for my $i (0..$#words) {
if ($words[$i] eq 'ddd') {
print join ' ', $i > 0 ? $words[$i-1] : (), $words[$i], $i < $#words ? $words[$i+1] : ();
print "\n";
}
}
}
ответил(а)
2021-01-19T19:54:42+03:00
2 месяца, 3 недели назад
добавить комментарий
пожаловаться
-4
#!/usr/bin/perl
while (<>) {
chomp;
@F = split /\s+/;
if (/^ddd$/) {print $_."\n";next};
for ($i=0; $i<=$#F;$i++) {
if ($F[$i] eq 'ddd') {
print "$F[$i-1] $F[$i] $F[$i + 1]\n";
}
}
}
ответил(а)
2021-01-19T19:54:42+03:00
2 месяца, 3 недели назад
добавить комментарий
пожаловаться
Ваш ответ