2013-03-19 3 views
0

좋아,이 질문은 제가 처음으로 질문 한 내용 중 하나입니다. 나는 충분히 대답했다고 생각합니다. 어쨌든, 내 프로젝트의이 부분에는 문자열 배열이 있습니다. 이 문자열에 고유 한 점은 명백한 패턴이 없다는 것입니다. 큰 배열의 단일 문자열 요소에 저자 목록이 있습니다. 일부 요소에는 두 명의 저자가 있고, 일부에는 더 많은 저자가 있습니다.문자열에 더 잘 맞습니다.

아르 템 Chebotko 및 Shiyong 루
아르 템 Chebotko, Shiyong 루, 파 샤드 포투이, 그리고 안소니 아리 스타
크레이그 프랑케, 사무엘 모린, 아르 템 Chebotko, 존 아브라함, 그리고 진주 화로
Liqiang 왕 : 여기 예제 ,

그래서 그것의 좋은이 제거 찍었을하는 동안
다니엘 Rebollar, 피터 J. 바스케즈 선임하고, 아르 템 Chebotko Shiyong 루, Xubo 페이, 아르 템 Chebotko, H. 빅토리아 브라이언트, 제프리 L. 램 모든 HTML 내 첫 문자열을 복잡하게 만드는 재즈, 1) 각 저자를 배열의 자체 문자열에 넣고 2) 저자를 성으로 정렬 할 수 있도록합니다. 배열에 패턴이 없기 때문에이 작업, substr 또는 split에 더 적합한 것이 무엇인지 알고 싶습니다. 여기 내 배열에 대한 몇 가지 주목할만한있어 :

  • 각 행은 때때로 중간 이니셜 또는 Sr./Jr 또한 첫 번째와 마지막과 저자 이름을 가지고 있습니다. 라인은 그들이 공간과 단어 "와"로 구분하고 두 저자가있는 경우
  • . 라인이 각각의 요소는 쉼표로 구분되는 두 개 이상있는 경우
  • 를 (위의 예 참조) 과 마지막에 단어 "and"가옵니다.
  • 라인에 단 한 개의 문장 부호가 있거나 단어 "and"가 필요한 경우.

나는 아직도 Perl에 익숙하지 않다는 것을 지적하고 싶다. 그러나 나는 C++에서왔다. 그래서 나는 컴퓨터 논리에 대해 조금 알고있다. 그 말을 듣고 나는 두 가지가 어떻게 작용 하는지를 알고 있다고 생각하지만 어느 쪽이 다른 쪽보다 낫지 만 더 친숙한 사람의 의견을 듣고 싶습니다. 나는 컴퓨터 코드가 실제로는 가지고 있지 않은 패턴에서 작동한다는 것을 알고있다.

답변

4

나는이 방법으로 substr을 어떻게 사용할 것인지 잘 모르겠다. ??

가 분할하는 세 가지 가능한 분리, 그래서 |로 분할을위한 정규식에 모두 가입이 나타납니다 일반적으로

@authors = split /, and |, | and /, $authors 

, 분할 성과 이름의 문제점은 주어진 풀 수없는 다중 단어 성 (예 : 폰 노이만) 및 "성"이 먼저 나오는 이름. 경험적으로는 Lingua::EN::NameParse이 시도합니다. (유사 모듈은 다른 언어를 사용할 수 있습니다.) 그냥 몇 가지 통찰력을위한

1

:

#!/usr/bin/perl 
use strict; 
use warnings; 
my $re_and=qr/,? *and */; 
my $re_com=qr/, */; 
while(<DATA>) { 
    chomp; 
    my @authors = split /$re_and|$re_com/; 
    for (@authors) { 
    my ($n, $l, $m, $t); 
    s/\s*$t\s*// if (($t) = /([JS]r\.)/); 
    my @n = split; 
    ($n, $m, $l) = @n if @n > 2; 
    ($n, $l) = @n if @n == 2; 
    print join ("::", grep {$_} ($n, $l, $m, $t)), "\n"; 
    } 
} 
__DATA__ 
Artem Chebotko and Shiyong Lu 
Artem Chebotko, Shiyong Lu, Farshad Fotouhi, and Anthony Aristar 
Craig Franke, Samuel Morin, Artem Chebotko, John Abraham, and Pearl Brazier 
Liqiang Wang, Shiyong Lu, Xubo Fei, Artem Chebotko, H. Victoria Bryant, and Jeffrey L. Ram 
Daniel Rebollar, Peter J. Vasquez Sr., and Artem Chebotko 

출력

Artem::Chebotko 
Shiyong::Lu 
Artem::Chebotko 
Shiyong::Lu 
Farshad::Fotouhi 
Anthony::Aristar 
Craig::Franke 
Samuel::Morin 
Artem::Chebotko 
John::Abraham 
Pearl::Brazier 
Liqiang::Wang 
Shiyong::Lu 
Xubo::Fei 
Artem::Chebotko 
H.::Bryant::Victoria 
Jeffrey::Ram::L. 
Daniel::Rebollar 
Peter::Vasquez::J.::Sr. 
Artem::Chebotko 
관련 문제