Perl에서 쉼표로 구분 된 문자열에서 단어를 추출하려면 어떻게합니까?
$myline = 'ca,cb,cc,cd,ce';
x 1, , $ 2 등등에 ca를 일치시킬 필요가있다.
불행히도
$myline =~ /(?:(\w+),?)+/;
doesn ' 일하지 마라. pcretest를 사용하면 'ce'과 $ 1이 일치합니다. 그것을 올바르게하는 방법? while 루프에 넣어야합니까?
고마워!
Perl에서 쉼표로 구분 된 문자열에서 단어를 추출하려면 어떻게합니까?
$myline = 'ca,cb,cc,cd,ce';
x 1, , $ 2 등등에 ca를 일치시킬 필요가있다.
불행히도
$myline =~ /(?:(\w+),?)+/;
doesn ' 일하지 마라. pcretest를 사용하면 'ce'과 $ 1이 일치합니다. 그것을 올바르게하는 방법? while 루프에 넣어야합니까?
고마워!
왜 split
function는 사용하지 마십시오.
my @parts = split(/,/, $myline)
은 사용하기가 쉽지 않습니까?
@parts = split(/,/,$myline);
split
당신은 구분 기호로 공급하는 정규 표현식을 사용하여 문자열 목록에 문자열을 분할 :
맞아요! 가장 쉬운 방법은 split! –
요소의 개수가 가변적이면 목표로하는 방식대로 수행하지 않을 것입니다. 그 다음 사용하지 그러나 경우,
while($myline =~ /(\w+)\b/g) { # do something with $1 }
나는 당신의 실제 데이터가 '캘리포니아, CB, CC, CD, CE'보다 더 복잡하다는 생각 하겠어 : 글로벌 플래그를 사용하여 문자열을 통해 루프 아마 정규 표현식이 보증되지 않습니다. 당신은 단락 문자 문자에 문자열을 분할 더 나을 것 : split
비록
my @things = split ',', $myline;
네 말이 맞아. 제 경우에는 분할을 사용하는 것이 훨씬 낫습니다. 왜 내가 그걸 생각하지 않았 니? –
Perl이기 때문에 여러 가지 방법이 있습니다. –
가 문제를 해결하는 좋은 방법이며,리스트 문맥에서 캡처 정규식은 잘 작동합니다. 두 가지 접근법을 아는 것이 유용합니다. csv로 PM의 당신이 CPAN에서 다운로드 할 수있는, 즉 Text::CSV
또는 Text::CSV_XS
에
my $line = 'ca,cb,cc,cd,ce';
my @words = $line =~ /(\w+)/g;
주목할만한 차이점은 split은 빈 항목을 보존하여 쉼표가 인접한 지점에서'undef'를 제공한다는 것입니다. regex 메소드는 하나 이상의 단어 문자를 포함하지 않으므로이 위치를 무시합니다. –
봐.
이렇게하면 필요한 것을 얻을 수 있으며 따옴표로 묶인 쉼표로 구분 된 값도 고려해야합니다. 이 모듈은 쉽게 밖으로 데이터를 분할하고 그것을 통해 분석 할 수 있도록 사용
... 예를 들어
: 단어가 쉼표를 포함 할 경우
my @field = $csv->fields;
, 당신은 같은 CSV 모듈을 사용할 수 있습니다 http://search.cpan.org/~makamaka/Text-CSV-1.16/lib/Text/CSV.pm –