贪婪与非贪婪匹配

Python 中的正则表达式

Maria Eugenia Inzaugarat

Data Scientist

贪婪与非贪婪匹配

  • 两类匹配方式:

    • 贪婪(greedy)
    • 非贪婪或惰性(lazy)
  • 标准量词默认是贪婪的:*+?{num, num}

Python 中的正则表达式

贪婪匹配

  • 〔贪婪〕:尽可能多地匹配字符

  • 返回最长匹配

import re
re.match(r"\d+", "12345bcada")
<re.Match object; span=(0, 5), match='12345'>

Python 中的正则表达式

贪婪匹配

  • 若匹配过多则回溯

  • 一次放弃一个字符

import re
re.match(r".*hello", "xhelloxxxxxx")
<re.Match object; span=(0, 6), match='xhello'>

Python 中的正则表达式

非贪婪匹配

  • 〔惰性〕:只匹配所需的最少字符
  • 返回最短匹配
  • 在贪婪量词后加 ?
import re
re.match(r"\d+?", "12345bcada")
<re.Match object; span=(0, 1), match='1'>

Python 中的正则表达式

非贪婪匹配

  • 若匹配过少则回溯

  • 一次扩展一个字符

import re
re.match(r".*?hello", "xhelloxxxxxx")
<re.Match object; span=(0, 6), match='xhello'>

Python 中的正则表达式

开始练习!

Python 中的正则表达式

Preparing Video For Download...