1.看书上教材说*?是非贪婪模式,那么对于下面这段代码,为啥结果是空呢?
>>> import re
>>> line = 'cats are smart than dogs.'
>>> m=re.match(r'(.*?)',line)
>>> m.group()
结果为:''
为什么结果为空呢?不应该是cats么?难道字符串前默认有个空字符?
新手求明白人给解答下,谢谢了
大家讲道理2017-04-17 17:29:36
.
= 임의의 문자 *
= 0회 이상 나타남, {0,}
?
과 동일, 이전 일치 항목이 가장 적은 문자 선택, {0,1}
<🎜과 동일 >
과 일치하려면 cats
, cats
뒤에 공백을 사용해야 합니다. r'(.*?) '
高洛峰2017-04-17 17:29:36
개인적인 이해에 따르면 .*?
는 시작 위치인 ^
과 일치하며 정규식에서는 다음과 같이 위치도 일치할 수 있습니다.
으아아아
을 대체하고 ^
에도 동일하게 적용되므로 $
은 .*?
과 직접 일치합니다.^
PS: 정규 표현식을 사용할 때, 특히 텍스트 콘텐츠가 많은 경우
은 사용하지 않는 것이 좋지만 .*
또는 [sS]*
등은 사용하지 않는 것이 좋습니다. [dD]*
高洛峰2017-04-17 17:29:36
정규식 탐욕적 일치와 비탐욕적 일치의 차이점은 다음과 같습니다.
그리디 모드: 매칭이 가능할 때 가장 긴 을 매칭합니다. ?
으로 끝나지 않는 표현입니다.
비 욕심 모드: 매칭이 가능한 경우, 가장 짧은 을 매칭합니다. 표현식은 ?
으로 끝납니다.
예를 들어 문자열 abcabcabc
에서 a
로 시작하고 c
으로 끝나는 문자열을 일치시키려면 abc
, abcabc
, abcabcabc
세 가지 일치 항목이 있습니다. 가장 긴 abcabcabc
은 a.*c
과 일치할 수 있고, 가장 짧은 abc
은 a.*?c
과 일치할 수 있습니다.
결과가 비어 있는 이유는 무엇인가요? 고양이여야 하지 않나요?
.*
은 그리디 패턴이므로 각 문자가 임의의 문자(.
)로 구성된 가장 긴 문자열, 즉 모든 입력 문자로 구성된 문자열과 일치합니다. 그리고 .*?
는 non-greedy 모드로, 각 문자가 임의의 문자(.
)인 가장 짧은 문자열, 즉 빈 문자열과 일치합니다.
고양이라는 단어를 일치시키려면 cats
을 사용해야 합니다. 입력 문자열의 첫 번째 단어를 일치시키려면 w+
또는 S+
을 사용해야 합니다.
기본적으로 문자열 앞에 null 문자가 있나요?
아니요, 하지만 정규식에서는 ^
를 사용하여 문자열의 시작 위치를 나타내고 $
을 사용하여 끝 위치를 나타낼 수 있습니다. 이 두 문자(^
및 $
)는 일치 규칙에 의해 지정된 기호이며 사용자가 작성하는 규칙 문자열에 사용된다는 점에 유의하세요. 이는 일치할 문자열에 이 두 기호가 포함되어 있다는 의미는 아닙니다.