2013-05-14 3 views
0

저는 Perl을 처음 사용합니다 ... Perl에서 파일을 읽고 싶습니다. 두 개 이상의 대문자로 된 연속 된 단어를 찾을 때마다 어떻게 정규 표현식을 사용하여 줄여 쓸 수 있습니까?정규 표현식을 사용하여 perl에서 문자열에서 약어를 생성하십시오.

"그래픽 사용자 인터페이스의 선구자는 더글라스 엥겔 바트 (Douglas Engelbart)가 이끄는 스탠포드 연구소 (Stanford Research Institute)의 연구원에 의해 개발되었으며 온라인 시스템에서 마우스로 조작되는 텍스트 기반 하이퍼 링크의 사용을 개발했습니다." wiki

결과 : "GUI의 선구자는 DE가 이끄는 SRI의 연구원이 발명했습니다. 그들은 OLS를 위해 마우스로 조작 된 텍스트 기반 하이퍼 링크의 사용을 개발했습니다."

+0

아니 진짜 문제. –

+1

어떤 부분에 문제가 있습니까? – ikegami

답변

1
s|\b(?:[A-Z][a-z]+\s+)+(?:[A-Z][a-z]+\b)|$match = $&; $match =~ s/[a-z\s]+//g;$match|ge 

e 개질제는 여분의 펄 명령문을 실행한다.

s/\b([A-Z])[a-z]+(?=\s+[A-Z][a-z])|\G(?!^)\s+([A-Z])[a-z]+/$1$2/g; 

예 :

+0

그 curlies는 관계가 없습니다. 원래의 솔루션이 더 좋았습니다. – ikegami

3

도 같은 표정으로 단일 패스에서 할 수

$_ = "A precursor to Graphical User Interface was invented by researchers at the Stanford Research Institute, led by Douglas Engelbart. They developed the use of text-based hyperlinks manipulated with a mouse for the On Line System ."; 

s/\b([A-Z])[a-z]+(?=\s+[A-Z][a-z])|\G(?!^)\s+([A-Z])[a-z]+/$1$2/g; 

print; 

출력 :

A precursor to GUI was invented by researchers at the SRI, led by DE. They developed the use of text-based hyperlinks manipulated with a mouse for the OLS .