python re 模块 正则表达式

一、正则表达式基本符号

^ 表示匹配字符串的开始位置 (例外 用在中括号中[ ] 时,可以理解为取反,表示不匹配括号中字符串)
$ 表示匹配字符串的结束位置
* 表示匹配 零次到多次(记忆方法:符号是星星,天上的星星可以是无数个也可以看不到
+ 表示匹配 一次到多次 (记忆方法:符号是加号,增加的意思,至少得有一个)
? 表示匹配零次或一次(记忆方法:符号是问号,那就是有或者没有,两种可能
. 表示匹配单个字符
| 表示为或者,两项中取一项
() 小括号表示匹配括号中全部字符
[] 中括号表示匹配括号中一个字符 范围描述 如[0-9 a-z A-Z]
{} 大括号用于限定匹配次数 如 {n}表示匹配n个字符 {n,}表示至少匹配n个字符 {n,m}表示至少n,最多m
\ 转义字符 如上基本符号匹配都需要转义字符 如 \* 表示匹配 * 号、\w 表示英文字母和数字、\W 非字母和数字、\d 表示数字、 \D 非数字、 \s 匹配任何空白字符

更多更详细介绍:点我查看更多正在表达式介绍

常用的正则表达式:

常用的正则表达式

匹配中文字符的正则表达式: [\u4e00-\u9fa5]
匹配双字节字符(包括汉字在内):[^\x00-\xff]
匹配空行的正则表达式:\n[\s| ]*\r
匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/
匹配首尾空格的正则表达式:(^\s*)|(\s*$)
匹配IP地址的正则表达式:/(\d+)\.(\d+)\.(\d+)\.(\d+)/g //
匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
匹配网址URL的正则表达式:http://(/[\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?
sql语句:^(select|drop|delete|create|update|insert).*$

二、re 模块,函数介绍

2.1 re.compile

该函数将创建一个正则表达式的对象,可以实现更有效率的复用。

import re
find_xx = re.compile('正则表达式', 修饰符)

2.2 re.findall

该函数将会搜索所有满足条件的字符串

import re
r = re.findall('正则表达式', 文本内容, 修饰符)

返回值会因为正则表达式的小括号不同而不同 共计三种情况

2.2.1 当给出的正则表达式不带括号的时候,列表的元素为字符串,此时字符串为整个正则表达式匹配的内容。
import re
     
text = '2018年的下半年,9月份, 27日'
pattern = re.compile(r'\d{4}年|\d{1}月|\d{2}日')
res = pattern.findall(text)
print(res)
# 输出结果: ['2018年', '9月', '27日']
2.2.2 正则表达式中只有一个括号,列表元素为字符串时,则内容和括号中的正则表达式对应
import re
text = '2018年的下半年,9月份, 27日'
pattern = re.compile(r'\d+(年|月|日|)')
res = pattern.findall(text)
print(res)
# 输出结果: ['年', '月', '日']
2.2.3 如果正则表达式中有多个括号时,列表的元素为多个字符组合成的元组,元组中的字符串格式与括号数对应,内容与正则表达式顺序对应。
import re
     
test = '2018年的下半年, 9月份, 27日'
pattern = re.compile(r'(\d)+(年|月|日)')
res = pattern.findall(test)
print(res)
     
# 输出结果为:[('8','年'),('9','月'),('7','日')]

如果不希望按小括号分组,可以在小括号开头输入 ?:  ,输出结果与 2.2.1 一致

import re
     
test = '2018年的下半年, 9月份, 27日'
pattern = re.compile(r'(\d)+(年|月|日)')
res = pattern.findall(test)
print(res)
     
# 输出结果为:['2018年', '9月', '27日']

2.3 re.finditer

搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是 match 对象,相比 re.findall 它可以获取匹配的位置

import re

# 编译正则表达式对象
pattern = re.compile(r'ab.*c')

# 在字符串中查找匹配正则表达式的内容
text = 'abcfabcgabch'
matches = pattern.finditer(text)

# 遍历所有匹配
for match in matches:
    start_pos = match.start()
    end_pos = match.end()
    match_str = match.group()
    print('Match found:', match_str)
    print('Start position:', start_pos)
    print('End position:', end_pos)

2.4 re.search

搜索第一个满足条件的字符串,查找到第一个停止

import re
find_xx = re.compile('正则表达式', '修饰符')
res = re.search(find_xx, text)

2.5 re.sub

替换所有满足条件的字符串

import re
text = 'hello 123 world 456'
replacedStr = re.sub("\d+","222",text)
print(replacedStr)
# 返回'hello 222 world 222'

 2.6 re.split

匹配分割string maxsplit是允许被分割成几个子串,默认是0最大化字串,如果是1则是从原本字符串中切出一个字串,其他字串整串返回。

import re
a = re.split('正则表达式', '文本', [maxsplit=0])
print(a)

2.7 group([group1,....])

返回一个或者多个子组,更详细介绍:点我查看

import re
m = re.search('正则表达式','文本')
print(m.group(2))
# 返回第二个字串
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值