정규식에서 대안의 순서가 중요합니까?


2

문자열에서 문자와 숫자를 추출하고 싶습니다.

나는 이것을 시도했다 :

>>> re.findall(r'[a-z]|\d*','a11b4')
['a', '11', 'b', '4', '']
>>> re.findall(r'\d*|[a-z]','a11b4')
['', '11', '', '4', '']

왜 정규식에서 대안의 순서를 변경하면 출력이 변경됩니까?


ArturMD-참고로 비슷한 질문보기 ... superuser.com/questions/1199574/…
Pimp Juice IT

답변:


2

\d와 함께 사용하기 때문 입니다 *.

가 있으면 [a-z]|\d*먼저 일치 시키려고합니다 a-z. 그렇지 않은 경우 0 회 이상의 숫자 반복을 시도합니다. 귀하의 예에서는 a먼저 일치 합니다.

그러나 다른 방법으로, 먼저 숫자 이상의 0 반복을 시도하고 일치시킵니다. 음, a 숫자의 0 반복, 그래서 그것은 '일치'의 자격. [a-z]이미 0 번 반복 할 수 있으므로 표현식 을 평가하지 않습니다 .

(이것은 특히 제대로이 패턴을 사용하기 위해 편지 또는 하나 개 이상의 숫자로) 대신 사용할 수 있습니다 :

[a-z]|\d+ 또는 \d+|[a-z]

이렇게하면 하나 이상의 반복되는 숫자를 찾고에 일치하지 않은 a다음 평가하고를 평가 [a-z]하여 예상 한 응답을 얻습니다.

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