侧边栏壁纸
博主头像
行迹小栈

即使明天我们的手脚都会折断,但是我们的衣领和袖口,依然笔挺!

  • 累计撰写 113 篇文章
  • 累计创建 13 个标签
  • 累计收到 9 条评论

目 录CONTENT

文章目录

python Re正则

Administrator
2024-07-24 / 0 评论 / 0 点赞 / 9 阅读 / 0 字 / 正在检测是否收录...

表达式

单字符匹配

| 字符 | 功能 | 位置 |
| :— | :——————: | ————– |
| . | 匹配任意1个字符(除了\n) | |
| [ ] | 匹配[ ]中列举的字符 | |
| \d | 匹配数字,即0-9 | 可写在字符集[…]中 |
| \s | 匹配空⽩,即空格,tab键 | 可写在字符集[…]中 |
| \w | 匹配数字字母下划线即a-Z、0-9、_ | 可写在字符集[…]中 |
| \D | 匹配⾮数字,即不是数字 | 可以写在字符集[…]中 |
| \S | 匹配⾮空⽩字符 | 可以写在字符集[…]中 |
| \W | 匹配非数字字母下划线 | 可以写在字符集[…]中 |

开始结束符

| 字符 | 功能 |
| —— | ——- |
| ^ | 匹配字符串开头 |
| \$ | 匹配字符串结尾 |

多字符匹配

| 字符 | 功能 |
| :—- | :————————-: |
| * | 前一个字符出现任意次,即可有可无 |
| + | 匹配前⼀个字符出现1次或者⽆限次,即至少有1次 |
| ? | 匹配前⼀个字符出现1次或者0次,即要么有1次,要么没有 |
| {m} | 匹配前⼀个字符出现m次 |
| {m,n} | 匹配前⼀个字符出现从m到n次 |
| {m,} | 则匹配m到无限次 |
| | |

| 字符 | 功能 |
| —- | :————: |
| .* | 贪婪匹配 |
| .*? | 惰性匹配-符合表达式停止匹配 |

| 修饰符 | 描述 |
| —- | :————————————-: |
| re.l | 使匹配对大小写不敏感 |
| re.L | 做本地化识别(locale-aware)匹配 |
| re.M | 多行匹配,影响 ^ 和 \$ |
| re.S | 使 . 匹配包括换行在内的所有字符 |
| re.U | 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B. |
| re.X | 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。 |

re正则表达式语句测试网站:

正则表达式在线测试 | 菜鸟工具 (runoob.com)

python re 的语法举例

findall: 匹配字符串中所有符合正则表达式的内容

lst = re.findall(r"\d+","我的电话号码是:10086,我女朋友的电话号码是10010")
print(lst)
# 运行结果:['10086', '10010']

finditer: 匹配字符串中的所有内容[返回的是迭代器],span包含起始位置,从迭代器中拿到内容需要.group()

it = re.finditer(r"\d+","我的电话号码是:10086,我女朋友的电话号码是10010")
for i in it:
    print(i)
    print(i.group())
# 运行结果:
<re.Match object; span=(8, 13), match='10086'>
10086
<re.Match object; span=(24, 29), match='10010'>
10010

search,找到一个结果就返回,停止匹配,返回的结果是match对象,拿数据要.group()

s = re.search(r"\d+","我的电话号码是:10086,我女朋友的电话号码是10010")
print(s.group())
# 运行结果: 10086

match是从头开始匹配,不符合就停止,相当于”^\d+”

s = re.match(r"\d+","10086,我女朋友的电话号码是10010")
print(s.group())
# 运行结果: 10086

预加载正则表达式,就是提前定义了一个正则表达式,可以反复使用这个变量

obj = re.compile(r"\d+")
ret = obj.finditer("我的电话号码是:10086,我女朋友的电话号码是10010")
for it in ret:
    print(it.group())

小实例

str = """ 
    <div class="a"><span id="1">漂亮国</span></div>
    <div class="b"><span id="2">金发姐</span></div>
    <div class="c"><span id="3">小帅</span></div>
    """
# re.S 可以使.匹配换行符  ()可以把想要的内容提取出来,(?P<组名>正则表达式)可以把内容进行分组
obj = re.compile(r'<div class=".*?"><span id="(?P<id>\d)">(?P<name>.*?)</span></div>',re.S)
s = obj.finditer(str)
for i in s:
    # print(i.group('id'))
    print(i.group('id','name'))
# 运行结果: 
('1', '漂亮国')
('2', '金发姐')
('3', '小帅')

re.sub 替换字符串

# re.sub(正则,替换的字符,被替换的字符串)
ret = re.sub(r"\d+", '998', "python = 997")
print(ret)
# 运行结果: python = 998

re.split 分割字符串

ret = re.split(r":| ","info:xiaoZhang 33 shandong")
print(ret)
# 运行结果: ['info', 'xiaoZhang', '33', 'shandong']
0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区