在python中使用正则表达式的步骤很简单:
- 用import re 导入正则表达式模块,
- 用re.compile()函数创建一个Regex对象(记得使用原始字符串)
- 向Regex对象传入search()想要查找的字符串。返回一个Match()对象。
- 调用Match对象的group()方法,返回实际匹配文本的字符串。
- 当group()方法中携带的参数为0或者不携带怎返回整个文本,如果携带1,2......将返回对应的文本,(利用括号实现分组)。
import re string = 'My number is 415-555-999' phone_number = re.compile(r'(\d{3})-(\d{3})-(\d{3})') mo = phone_number.search(string) print(mo.group(0)) print(mo.group(2))result = 415-555-999 and 555
- 用管道可以实现匹配多个分组
import re string = 'My number is 415-555-999' phone_number = re.compile(r'(\d{3})-(\d{3})-(\d{3})|number') mo = phone_number.search(string) print(mo.group(0))
- 用问号实现可选匹配(零次或一次)
import re string = 'My number is 415-555-999' phone_number = re.compile(r'n(u)?mber') mo = phone_number.search(string) print(mo.group(0))result = number
- 用*号匹配多次或者零次
import re string = 'My nuuuumber is 415-555-999' phone_number = re.compile(r'n(u{1})*mber') mo = phone_number.search(string) print(mo.group(0))result = nuuuumber
- 用加号匹配一个或者多次
import re string = 'My nuuuumber is 415-555-999' phone_number = re.compile(r'n(u{1})+mber') mo = phone_number.search(string) print(mo.group(0))result = nuuuumber
- 贪心匹配和非贪心匹配
Python的正则表达式默认是贪心的,这表示在有二义的情况下会尽量匹配长的字符串。非贪心版本是尽可能的匹配最短的字符串,即在结束的花括号后跟着一个问号。
import re string = 'HaHaHaHa' phone_number = re.compile(r'(Ha){2,4}?') mo = phone_number.search(string) print(mo.group(0))result = "HaHa"
- 正则表达式符号复习
1.?匹配零次或一次前面的分组;
2.*匹配零次或无数次前面的分组;
3.+匹配一次或无数次前面的分组;
4.{n}匹配n次前面的分组
5.{n,}匹配n次或者更多次前面的分组
6.{,m}匹配零次到m次前面的分组
7.{n,m}?n次或者没次非贪心匹配
8.^spam意味着字符串必须以spam开始
9.spam$意味着字符串必须以spam结束
10..匹配所有的字符,换行符除外
11.\d,\w,\s分别匹配数字,单词,空格(\D....分别匹配非数字、非单词、非空格)
12.[adc]匹配放括号中的任意字符(诸如a、b、c)
13[^adb]匹配不在括号内的任意字符
- 不区分大小写的匹配
import re robocop = re.compile(r'robocop',re.I) content = robocop.search("RoboCop is part man ,part machine,all cop..").group() print(content)result = "RoboCop"
- 用sub()方法替换字符串
import re robocop = re.compile(r'robocop',re.I) content = robocop.sub("v","RoboCop is part man ,part machine,all cop..") print(content)result = "v is part man ,part machine,all cop.."
- 管理复杂的正则表达式
可以告诉re.compile(),向其传入re.verbose作为第二个参数