쉼표로 구분 된 줄에 Perl 분할 함수를 사용하고 배열로 구분 된 쉼표 사이에 두 개 이상의 단어 만 캡처하고 싶습니다. 단일 단어는 필요하지 않습니다.Perl 정규 표현식 질문
예를 들어,이 라인 - >> AAA, CCC의 DDD, EEE, FFF GGG UUU, 가 난 단지 원하는, ccc ddd and fff ggg uuu
while(<FH>)
{
@ = split(/,/);
}
쉼표로 구분 된 줄에 Perl 분할 함수를 사용하고 배열로 구분 된 쉼표 사이에 두 개 이상의 단어 만 캡처하고 싶습니다. 단일 단어는 필요하지 않습니다.Perl 정규 표현식 질문
예를 들어,이 라인 - >> AAA, CCC의 DDD, EEE, FFF GGG UUU, 가 난 단지 원하는, ccc ddd and fff ggg uuu
while(<FH>)
{
@ = split(/,/);
}
UPDATE : 추가 "AAA"보호 및 ", "보호도.
분할은 쉼표 주위의 모든 공간을 먹어 버리기 때문에 공백이 포함 된 배열의 모든 요소는 다중 단어입니다.
데모 스크립트 :
my @data = (
'aaa, ccc ddd, eee, fff ggg uuu'
, ' aaa bbb ,ccc,eee,fff ggg uuu '
, 'aaa,ccc,eee,fff'
);
for my $line (@data) {
printf "|%s| ==> \n", $line;
$line =~ s/^\s+|\s+$//g;
my @cut = grep {// } split(/\s*,\s*/, $line);
printf "|%s|\n\n", join('|', @cut);
}
출력 :
|aaa, ccc ddd, eee, fff ggg uuu| ==>
|ccc ddd|fff ggg uuu|
| aaa bbb ,ccc,eee,fff ggg uuu | ==>
|aaa bbb|fff ggg uuu|
|aaa,ccc,eee,fff| ==>
||
Dallaylaen의 솔루션보다 간결
덜하지만, 쉽게/확인 특별한 경우를 처리 할 수 있습니다.
(미확정, 미확정, @parsedvalues) = 분할 /,/
당신은 esentialy 당신이 분할에서 얻을 처음 두 값을 던져 :
라인의 끝과 맨 앞에 \ s *를 지적 해 주셔서 감사합니다. – Dallaylaen
그것은만큼 간단합니다.
그게 내가 원하는 것을하지 않고, 나는 개인의 다중 단어를 원하고, 하나의 단어와 여러 단어를 포함하는 전체 줄을 원하지 않는다. ... –
Dallaylaen에게 감사의 말을 전한다. 필요에 따라 작동합니다. 다시 한 번 감사드립니다 –