.
元字符 | 说明 |
---|---|
. | 代表任意字符 |
| | 逻辑或操作符 |
[ ] | 匹配内部的任一字符或子表达式 |
[^] | 对字符集和取非 |
- | 定义一个区间 |
对下一字符取非(通常是普通变特殊,特殊变普通) | |
* | 匹配前面的字符或者子表达式0次或多次 |
*? | 惰性匹配上一个 |
+ | 匹配前一个字符或子表达式一次或多次 |
+? | 惰性匹配上一个 |
? | 匹配前一个字符或子表达式0次或1次重复 |
{n} | 匹配前一个字符或子表达式 |
{m,n} | 匹配前一个字符或子表达式至少m次至多n次 |
{n,} | 匹配前一个字符或者子表达式至少n次 |
{n,}? | 前一个的惰性匹配 |
^ | 匹配字符串的开头 |
A | 匹配字符串开头 |
$ | 匹配字符串结束 |
[] | 退格字符 |
c | 匹配一个控制字符 |
d | 匹配任意数字 |
D | 匹配数字以外的字符 |
匹配制表符 | |
w | 匹配任意数字字母下划线 |
W | 不匹配数字字母下划线 |
正则表达式 | 代表的匹配字符 |
---|---|
[0-9] | 0123456789任意之一 |
[a-z] | 小写字母任意之一 |
[A-Z] | 大写字母任意之一 |
d | 等同于[0-9] |
D | 等同于[^0-9]匹配非数字 |
w | 等同于[a-z0-9A-Z_]匹配大小写字母、数字和下划线 |
W | 等同于[^a-z0-9A-Z_]等同于上一条取非 |
例:
import re key2 = r"<html><body><h1>hello world</h1></body></html>"#这段是你要匹配的文本 re2 = re.compile(r"(?<=<h1>).+?(?=</h1>)") # ?<= 和 ?= 就是匹配里面 向前查找 和 向后查找 print(re2.findall(key2)) # 结果为 Hello world """split 方法按照能够匹配的子串将字符串分割后返回列表""" xx = re.split('W+', ',1,runoob,runoob, runoob1212123'); print(xx) """和 findall 类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回""" it = re.finditer(r"d+","12a32bc43jf3") for match in it: print (match.group() ) """ findall在字符串中找到正则表达式所匹配的所有子串 注意: match 和 search 是匹配一次 findall 匹配所有。 """ pattern = re.compile(r'D+') # 查找非数字 result1 = pattern.findall('runoob 123 google 456') print(result1) """ compile 编译正则表达式,供 match() 和 search() 这两个函数使用""" pattern = re.compile(r'([0-9]+) ([0-9]+)',re.I) # re.I 表示忽略大小写 cc = pattern.match('23 44444 343') print(cc.group(2) ) """sub 替换字符串中的匹配项""" phone = "2000-34-434 #这是一个外国的电话" num = re.sub(r'#.*$',"",phone); print(num) """ search 全局搜索字符串""" matchObj = re.search(r'com', 'www.runoob.com') if matchObj: print("search --> matchObj.group() : ", matchObj.group()) else: print( "No match!!",matchObj) """match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。""" ma = re.match('www', 'www.runoob.com') # 在起始位置匹配 print(ma) print(ma.group(0))
#字符串中提取ip
string_ip = "is this 289.22.22.22 ip ?
result = re.findall(r"(?:[0-9]{1,3}.){3}[0-9]{1,3}", string_ip)