찾다

 >  Q&A  >  본문

python中正则表达式*?的一个问题

1.看书上教材说*?是非贪婪模式,那么对于下面这段代码,为啥结果是空呢?

>>> import re
>>> line = 'cats are smart than dogs.'
>>> m=re.match(r'(.*?)',line)
>>> m.group()

结果为:''
为什么结果为空呢?不应该是cats么?难道字符串前默认有个空字符?
新手求明白人给解答下,谢谢了

PHP中文网PHP中文网2768일 전725

모든 응답(4)나는 대답할 것이다

  • 大家讲道理

    大家讲道理2017-04-17 17:29:36

    . = 임의의 문자
    * = 0회 이상 나타남, {0,}
    ?과 동일, 이전 일치 항목이 가장 적은 문자 선택, {0,1}<🎜과 동일 >

    결론적으로 말하면 "모든 문자가 0번 등장한다"는 의미이므로 아무것도 없습니다.

    과 일치하려면 cats, cats 뒤에 공백을 사용해야 합니다. r'(.*?) '

    회신하다
    0
  • 高洛峰

    高洛峰2017-04-17 17:29:36

    개인적인 이해에 따르면 .*?는 시작 위치인 ^과 일치하며 정규식에서는 다음과 같이 위치도 일치할 수 있습니다. 으아아아

    이 예는

    을 대체하고 ^에도 동일하게 적용되므로 $.*?과 직접 일치합니다.^PS: 정규 표현식을 사용할 때, 특히 텍스트 콘텐츠가 많은 경우
    은 사용하지 않는 것이 좋지만 .* 또는 [sS]* 등은 사용하지 않는 것이 좋습니다. [dD]*

    회신하다
    0
  • 高洛峰

    高洛峰2017-04-17 17:29:36

    정규식 탐욕적 일치와 비탐욕적 일치의 차이점은 다음과 같습니다.

    • 그리디 모드: 매칭이 가능할 때 가장 긴 을 매칭합니다. ?으로 끝나지 않는 표현입니다.

    • 비 욕심 모드: 매칭이 가능한 경우, 가장 짧은 을 매칭합니다. 표현식은 ?으로 끝납니다.

    예를 들어 문자열 abcabcabc에서 a로 시작하고 c으로 끝나는 문자열을 일치시키려면 abc, abcabc, abcabcabc 세 가지 일치 항목이 있습니다. 가장 긴 abcabcabca.*c과 일치할 수 있고, 가장 짧은 abca.*?c과 일치할 수 있습니다.

    으아아아

    결과가 비어 있는 이유는 무엇인가요? 고양이여야 하지 않나요?

    .*은 그리디 패턴이므로 각 문자가 임의의 문자(.)로 구성된 가장 긴 문자열, 즉 모든 입력 문자로 구성된 문자열과 일치합니다. 그리고 .*?는 non-greedy 모드로, 각 문자가 임의의 문자(.)인 가장 짧은 문자열, 즉 빈 문자열과 일치합니다.

    고양이라는 단어를 일치시키려면 cats을 사용해야 합니다. 입력 문자열의 첫 번째 단어를 일치시키려면 w+ 또는 S+을 사용해야 합니다.

    으아아아

    기본적으로 문자열 앞에 null 문자가 있나요?

    아니요, 하지만 정규식에서는 ^를 사용하여 문자열의 시작 위치를 나타내고 $을 사용하여 끝 위치를 나타낼 수 있습니다. 이 두 문자(^$)는 일치 규칙에 의해 지정된 기호이며 사용자가 작성하는 규칙 문자열에 사용된다는 점에 유의하세요. 이는 일치할 문자열에 이 두 기호가 포함되어 있다는 의미는 아닙니다.

    회신하다
    0
  • 黄舟

    黄舟2017-04-17 17:29:36

    . 경계 일치는 일치하는 문자열의 문자를 소비하지 않으며 비탐욕 모드이므로

    문자열을 일치시킬 수 없습니다.

    회신하다
    0
  • 취소회신하다