当前位置:嗨网首页>书籍在线阅读

20-用点-星匹配所有字符

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

7.9.1 用点-星匹配所有字符

有时候想要匹配所有字符串。例如,假定想要匹配字符串 'First Name:' ,接下来是任意文本,再接下来是 'Last Name:' ,然后又是任意文本。可以用点-星( .* )表示“任意文本”。回忆一下,句点字符表示“换行符外的所有单个字符”,星号字符表示“前面字符出现零次或多次”。

在交互式环境中输入以下代码:

>>> nameRegex = re.compile(r'First Name: (.*) Last Name: (.*)')
>>> mo = nameRegex.search('First Name: Al Last Name: Sweigart')
>>> mo.group(1)
'Al'
>>> mo.group(2)
'Sweigart'

点-星使用“贪心”模式:它总是匹配尽可能多的文本。要用“非贪心”模式匹配所有文本,就使用点-星和问号,像和大括号一起使用时那样,问号告诉Python用非贪心模式匹配。

在交互式环境中输入以下代码,看看贪心模式和非贪心模式的区别:

>>> nongreedyRegex = re.compile(r'<.*?>')
>>> mo = nongreedyRegex.search('<To serve man> for dinner.>')
>>> mo.group()
'<To serve man>'
>>> greedyRegex = re.compile(r'<.*>')
>>> mo = greedyRegex.search('<To serve man> for dinner.>')
>>> mo.group()
'<To serve man> for dinner.>'

两个正则表达式都可以翻译成“匹配一个左尖括号,接下来是任意字符,然后是一个右尖括号”。但是字符串 '<To serve man> for dinner.>' 对右尖括号有两种可能的匹配。在非贪心的正则表达式中,Python匹配最短可能的字符串: '<To serve man>' 。在贪心的正则表达式中,Python匹配最长可能的字符串: '<To serve man> for dinner.>'