2014-09-22 3 views
-3

파이썬 정규식을 사용하여 연속 단어를 가져오고 싶습니다. 텍스트의 예를 들면 다음과 같습니다파이썬 정규 표현식을 사용하여 연속 대문자를 구하십시오.

"the United States of America has many big cities like New York and Los Angeles, and others like Atlanta" 

출력은

['United States of America','New York','Los Angeles'] 

누군가가 나를 도울 수

해야 하는가? 그리고 '미국'정규식

[A-Z][a-z]+(?=\s[A-Z])(?:\s[A-Z][a-z]+)+ 

를 사용하지만 America'.The 동일의 '미국으로 원하는대로 참고 이미 출력을 받고 있어요는 존슨과 존슨 간다.

+4

'미국 '에는 연속적인 대문자가 없습니다. 정규 표현식 엔진은'of '와 어떻게 일치해야합니까? – MattDMo

+0

예. 맞습니다. 그러나 'of'단어에 대한 예외를 넣을 수 있습니다. –

+2

또한 '존슨 앤 존슨'과 '뉴욕과 로스 앤젤레스'와 어떻게 일치하는지 어떻게 알 수 있습니까? – MattDMo

답변

0

글쎄, 마침내 나는 그것을 이해하고 내 필요에 부합한다. 마침내 그 일을 끝내는 패턴이 있습니다.

text = 'United States of America has many big cities like New York.' 
pattern = '([A-Z][a-z]+(?:\s+[A-Z][a-z]+)*(?:\s+[a-z]+)?(?:\s+[A-Z][a-z]+)+)' 
result = re.findall(pattern,text) 
print result 
['United States of America', 'New York'] 
0

그런 문제를 해결 한 방법은 예외 목록 일종의 방법을 사용하는 것입니다. 예를 들어, "United States"라는 단어를 찾으면 코드는 다음 문자가 "of"인지 확인하고 "America"까지 구문 분석해야합니다. 속도와 효율성은이 방법을 사용할 때 밀접하게 고려해야 할 사항입니다. 당신은 조심하지 않으면 오히려 쉽게 O^n 기능을 가질 수 있습니다.

PS 왜이 질문은 투표 수효가 너무 많습니까? 그것은 유효한 질문 인 것 같습니다.

+0

답장을위한 고맙습니다. 그리고 귀하의 솔루션은 사전 정의 된 단어 세트에 대해 작동 할 수도 있지만 일반적인 솔루션을 더 찾고있었습니다. 문장에 나타나는 단어 [ ','및 ', ...]에 대소 문자를 구분하는 패턴을 정의한다고 가정 해보십시오. –

+0

나는 일반적인 것들이 있다고 생각하지 않는다. 또한 "예외 목록"을 미리 정의 할 필요는 없습니다. 뇌를 당신의 아이디어로 생각해 내기 위해 예제로 사용했습니다. 1) 대문자가있는 단어를 검색/찾을 수 있습니다. 2) [ ',', ',', ...]가 다음 단어 집합인지 확인하고, 3) 그렇다면 다음 글자에 cap 글자 4) 그렇지 않으면 아마 당신의 요구 사항에 맞는 것이 없을 것입니다. 나는 약간의 코드를 작성 하겠지만, 너무 많은 atm에주의를 기울일 수는 없다. –

관련 문제