2014-09-27 8 views
-2

파이썬에서 문자열에서 영숫자가 아닌 동 질적 시퀀스를 모두 추출 할 수 있는지, 그리고 정규식을 사용하지 않고 스타일을 잘 지정하는 것이 가능한지 궁금합니다. 단 위/맡았다 문자와 숫자를 낮 춥니 다.Python : 문자열에서 시퀀스 찾기

+0

왜 정규 표현식을 사용하지 않으시겠습니까? 정규 표현식을 사용하기에 가장 적당한 시간입니다. – Veedrac

답변

1

사용 re :

import re 
re.findall("[a-zA-Z0-9]+", "hello there1 A2... bl3h") 
#>>> ['hello', 'there1', 'A2', 'bl3h'] 

별로 중요하지 않습니다.

당신은 유니 코드 숫자 나 문자의 무엇을 원하는 경우에, 당신은 곧 regex 모듈을 사용할 수 있습니다 :이 thing.isalnum() IFF에 물건을 제공해야

import regex 
regex.findall("[[:alnum:]]+", "hello_there1 A2... bl3h") 
#>>> ['hello', 'there1', 'A2', 'bl3h'] 

합니다.

+0

'[[alnum :]] +' – falsetru

+0

감사합니다! 나는 정규식 모듈이 내가 모든 목적을 위해 필요한 것임을 알았다. – PaulOverflow

+0

@falsetru Nice, thanks :) – Veedrac

3

사용

는 영숫자 비 균일 한 시퀀스에서 나는 AAA1A1 등등 ... (구두점 같은 모든 순서를 의미 str.isalnum하십시오 list comprehension/generator expression

>>> 'F'.isalnum() 
True 
>>> '7'.isalnum() 
True 
>>> ','.isalnum() 
False 

:

또는 언 바운드 방법 filter와 25,:

>>> filter(str.isalnum, 'ab,cd"12"EF') 
'abcd12EF' 

UPDATE

당신이 문자를 원하지 않는 경우,하지만 문자의 시퀀스, 당신은 itertools.groupby 사용할 수 있습니다

>>> import itertools 
>>> [''.join(grp) for yes, grp in itertools.groupby('ab,cd"12"EF', key=str.isalnum) if yes] 
['ab', 'cd', '12', 'EF'] 
+0

' "".isalnum() # >>> True'에 유의하십시오. 또한 ""1 ".isalnum() # >>> True'. – Veedrac

+2

질문에 대한 나의 이해는 그가 문자가 아닌 시퀀스를 추출하기를 원한다는 것입니다. 결과는 오히려'[ 'ab', 'cd', '12', 'EF']'이어야합니다. – georg

+0

@Veedrac, 캐릭터는 무엇입니까? 그것은 내 컴퓨터에서 잘 렌더링되지 않습니다. 그것이 자릿수 인 경우 OP가 원하는 것일 수 있습니다. – falsetru