정규식을 기반으로 파이썬 분할 문자열


115

"HELLO there HOW are YOU"(Python에서) 대문자 로 문자열을 분할하는 가장 좋은 방법은 무엇입니까 ?

그래서 나는 다음과 같은 배열로 끝날 것입니다. results = ['HELLO there', 'HOW are', 'YOU']


편집하다:

나는 시도했다 :

p = re.compile("\b[A-Z]{2,}\b")
print p.split(page_text)

그래도 작동하지 않는 것 같습니다.


2
당신은 무엇을 시도 했습니까? -못 찾았 어 re.split()?
Gareth Latty

5
작동하지 않는다고 말하면 그 이유를 설명해야합니다. 예외가 있습니까? (그렇다면 전체 예외를 게시하십시오.) 잘못된 출력을 얻습니까?
Gareth Latty

답변:


134

나는 제안한다

l = re.compile("(?<!^)\s+(?=[A-Z])(?!.\s)").split(s)

이 데모를 확인하십시오 .


5
컴파일을 사용하지 않으면 어떻게됩니까?
Feelsbadman

3
재 문서 , " 대부분의 정규 표현식 작업은 함수가 먼저 정규식 객체를 컴파일 할 필요가 없습니다 바로 가기입니다. 모듈 수준의 기능과의 RegexObject 방법으로 사용할 수 있지만, 일부 미세 조정 매개 변수를 그리워. "당신은 사용할 수 있습니다 re.split(re.split(pattern, string, maxsplit=0, flags=0))이전에 인용 된 문서에서 언급 한대로.
ZaydH

57

미리보기를 사용할 수 있습니다.

re.split(r'[ ](?=[A-Z]+\b)', input)

이것은 단어 경계로 끝나는 대문자 문자열이 뒤 따르는 모든 공백에서 분할됩니다.

대괄호는 가독성을위한 것이며 생략 할 수도 있습니다.

단어의 첫 글자가 대문자이면 충분하다면 (앞으로도 나누고 싶다면 Hello) 훨씬 쉬워집니다 :

re.split(r'[ ](?=[A-Z])', input)

이제 이것은 모든 공백에서 대문자로 나뉩니다.


1
re.split(r'[ ](?=[A-Z]+\b)', input)대문자를 찾지 못하도록 어떻게 변경 합니까? 예 : "A"와 일치하지 않습니까? 나는 시도했다 re.split(r'[ ](?=[A-Z]{2,}+\b)', input). 감사!

@JamesEggers 당신은 적어도 두 개의 대문자가 필요하다는 것을 의미합니다 I. re.split(r'[ ](?=[A-Z]{2,}\b)', input)해야합니다.
Martin Ender 2011

2
나는 적어도 [ ]+또는 어쩌면 \W+조금 더 많은 사례를 잡을 것을 제안 합니다. 그래도 좋은 대답입니다.
georg

나는 같은 접근법을 시도했다. 그러나 a [ ]는 나를 위해 작동하지 않았습니다. 대신 \s. 나를 위해 일한 완전한 정규식은re.split("\s(?=[A-Z]+\s)", string)
h3xh4wk

0

질문에 리터럴 문자열이 포함되어 "\b[A-Z]{2,}\b"있지만 \br 수정자가 없으므로 백 스페이스를 의미합니다.

시도 : r"\b[A-Z]{2,}\b".

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.