本篇主页内容:match的基本使用,search的基本使用,findall,finditer的基本使用,匹配中文,贪婪与非贪婪模式python
# 正则结果match的使用案例
import re
# 如下正则分红2个组,以小括号为单位
# [a-z]表示出现小写a-z任意字母均可以,+表示至少出现1次
# 两组之间有一个空格,表示匹配的两个英文字符之间有空格
s = r"([a-z]+) ([a-z]+)"
# 编译
pattern = re.compile(s, re.I) # s, I表示忽略大小写
m = pattern.match("Hello world wide web")
# group(0) 表示返回整个匹配成功的字符串,即全部小组
s = m.group(0)
print("全部小组的匹配结果:\n", s)
# 返回匹配成功的整个字符串的跨度,即全部小组
a = m.span(0)
print("全部小组的匹配结果跨度:\n", a)
# group(0) 表示返回的第一个分组匹配成功的字符串
s = m.group(1)
print("第1小组的匹配结果:\n", s)
# 返回匹配成功的整个字符串的跨度
a = m.span(1)
print("第1小组的匹配结果跨度:\n", s)
# groups() 打印出全部的小组,等价于m.group(1), m.group(2)...
s = m.groups()
print(s)
从结果能够看到:匹配到两个小组,一个Hello,一个world,中间的空格是外面的,代码中包含一些具体的输出格式git
# search的基本使用
import re
s = r'\d+'
pattern = re.compile(s)
# 无参数表示从头开始查找,到最后结束
m = pattern.search("one12two34three56")
print(m.group(0))
# 参数代表搜查的范围,例如:10-40
m = pattern.search("one12two34three56", 10, 40)
print(m.group(0))
由于是从第10个开始查找,因此查到的是56github
# findall,finditer的基本使用
import re
s = r'\d+'
pattern = re.compile(s)
m = pattern.findall("I am 18 years old, and 185 high")
print(m)
n = pattern.finditer("I am 18 years old, and 185 high")
print(type(n))
# 迭代器使用for循环输出
for i in n:
# 只输出i会包含无用数据
print(i.group())
查找全部匹配的字符串web
# 中文unicode案例
import re
hello = u'你好,再见陌生人'
# 中文全角逗号一类的不在[u4e00-u9fa5]范围内
pattern = re.compile(r'[\u4e00-\u9fa5]+')
m = pattern.findall(hello)
print(m)
由于中文全角逗号一类的不在[u4e00-u9fa5]范围内,所在 findall 返回的是一个列表,包含两个值正则表达式