2017-03-29 8 views
0

파이썬에서 "aabbbc"와 같은 "2a3bc"문자열을 디코드하려고합니다. 그래서 내가해야 할 첫 번째 일은 그것을 이해할 수있는 그룹들로 나누는 것입니다. 다른 말로 : ['2a','3b','c'].문자열을 숫자와 문자 또는 단 하나의 문자 그룹으로 나누기

기본적으로 숫자와 문자 또는 (2) 문자 만 일치시킵니다.

re.findall('\d+\S|\s', '2a3bc') 

을 그리고 반환 :

나는이있어

['2a', '3b'] 

그래서 실제로는 c를 실종.

아마 내 정규식 기술이 부족합니다. 도움이 필요합니다.

+0

http://stackoverflow.com/questions/26006949/python-expanding-a-string-of-variables-with-integers 및 http://stackoverflow.com/questions/35003123/fairly-basic-string-expansion -in-python – TessellatingHeckler

+0

@TessellatingHeckler 감사합니다. 나는 "확장"또는 "확장"이라는 단어를 사용하지 않을 생각입니다. 그러나 나는 이미 거의 30 분 동안 수색을했다. – adrianmc

답변

5

\S은 공백이 아니고 \s은 공백입니다. 당신은 두 경우 모두에서 공백이 아닌 찾고있는, 그래서 당신은 어디 \s를 사용하지 않아야합니다 : 대신에 하나 개 이상의 숫자에 대한 +를 사용하는 제로에 대한 *를 사용

>>> re.findall(r'\d+\S|\S', '2a3bc') 
['2a', '3b', 'c'] 

그러나이 표현이 더 짧아 질 수있다 그 그룹이 어떤 숫자도 선행하지 않을 수도 있기 때문에, 그 다음에 그 그룹을 제거 할 수 있습니다. 문자, 숫자, 심지어 문장 부호를 포함 -

>>> re.findall(r'\d*\S', '2a3bc') 
['2a', '3b', 'c'] 

는 다시,하지만 \S 단순히 공백이 아닌 것을 확인합니다. \D (비 자릿수)은 비슷한 문제가 있습니다. 즉, 숫자는 제외되지만 구두점이 포함됩니다. 이에 대한 짧은, 깨끗한 정규식, 다음, 알파벳 문자를 표시하는 \w으로 \S을 대체 할 것이다 :

>>> re.findall(r'\d*\w', '2a3bc') 
['2a', '3b', 'c'] 

을 그룹의 다른 문자 클래스가 이미 자리이기 때문에,이 특정 \w에는 문자와 일치합니다.

관련 문제