Python学习笔记模式匹配与正则表达式之用正则表达式匹配更多模式

  随笔记录方便自己和同路人查阅。

#------------------------------------------------我是可耻的分割线-------------------------------------------

  既然你已知道用 Python 创建和查找正则表达式对象的基本步骤,就可以尝试一些更强大的模式匹配功能了。

#------------------------------------------------我是可耻的分割线-------------------------------------------

  1、利用括号分组,示例代码:

#! python 3
# -*- coding:utf-8 -*-
# Autor: Li Rong Yang
import re#用 import re 导入正则表达式模块。
phoneNumregex = re.compile(r'(d{3})-(d{3}-d{4})')#使用括号进行分组。
text = phoneNumregex.search('My number is 415-555-4242')#向 Regex 对象的 search()方法传入想查找的字符串。它返回一个 Match 对象。
print(text.group(1))#调用 Match 对象的 group()方法,返回分组1的内容。

  运行结果:

  2、用管道匹配多个分组,示例代码:

  字符|称为“管道”。希望匹配许多表达式中的一个时,就可以使用它。例如,正则表达式 r'Batman|Tina Fey'将匹配'Batman'或'Tina Fey'。

如果 Batman 和 Tina Fey 都出现在被查找的字符串中,第一次出现的匹配文本,将作为 Match 对象返回。

  3、用问号实现可选匹配,示例代码:

  有时候,想匹配的模式是可选的。就是说,不论这段文本在不在,正则表达式都会认为匹配。字符?表明它前面的分组在这个模式中是可选的。

   4、用星号匹配零次或多次,示例代码:

  *(称为星号)意味着“匹配零次或多次”,即星号之前的分组,可以在文本中出Python 编程快速上手——让繁琐工作自动化现任意次。它可以

完全不存在,或一次又一次地重复。

  对于'Batman',正则表达式的(wo)*部分匹配 wo 的零个实例。对于'Batwoman',(wo)*匹配 wo 的一个实例。对于'Batwowowowoman',(wo)*匹配

wo 的 4 个实例。

  如果需要匹配真正的星号字符,就在正则表达式的星号字符前加上倒斜杠,即*。

  5、用加好匹配一次或多次,示例代码:

  *意味着“匹配零次或多次”,+(加号)则意味着“匹配一次或多次”。星号不要求分组出现在匹配的字符串中,但加号不同,加号前面的分组必须“至少

出现一次”。这不是可选的。

  正则表达式 Bat(wo)+man 不会匹配字符串'The Adventures of Batman',因为加号要求 wo 至少出现一次。
  如果需要匹配真正的加号字符,在加号前面加上倒斜杠实现转义:+。

  6、用花括号匹配特定次数,示例代码:

  

#! python 3
# -*- coding:utf-8 -*-
# Autor: Li Rong Yang
import re#用 import re 导入正则表达式模块。
phoneNumregex = re.compile(r'(d{3})-(d{3}-d{4})')#使用括号进行分组。
text = phoneNumregex.search('My number is 415-555-4242')#向 Regex 对象的 search()方法传入想查找的字符串。它返回一个 Match 对象。
print(text.group(1))#调用 Match 对象的 group()方法,返回分组1的内容。


phoneNumregex = re.compile(r'(ddd)-(ddd-dddd)')#使用括号进行分组。
text = phoneNumregex.search('My number is 415-555-4242')#向 Regex 对象的 search()方法传入想查找的字符串。它返回一个 Match 对象。
print(text.group(1))#调用 Match 对象的 group()方法,返回分组1的内容。

  运行结果:

  根据结果可以看出,两段代码效果完全一致,花括号只是匹配相同内容的次数。

原文地址:https://www.cnblogs.com/lirongyang/p/9574667.html