python正则表达式库及re学习02

  • ():正则表达式的组选择。

    组 就是把 正则表达式 匹配的内容 里面 其中的某些部分 标记为某个组。

    python 复制代码
    import re
    
    content = """苹果,苹果是绿色的
    橙子,橙子是橙色的
    香蕉,香蕉是黄色的
    """
    
    p = re.compile('^(.*),', re.M)
    for v in p.findall(content):
        print(v)
    # 苹果
    # 橙子
    # 香蕉
    python 复制代码
    import re
    
    content = """张三,手机号码15945678901
    李四,手机号码13945677701
    王二,手机号码13845666901
    """
    
    p = re.compile('^(.+),.+(\d{11})', re.M)
    for v in p.findall(content):
        print(v)
    # ('张三', '15945678901')
    # ('李四', '13945677701')
    # ('王二', '13845666901')

    当有多个分组的时候,我们可以使用 (?P<分组名>...) 这样的格式,给每个分组命名。这样做的好处是,更方便后续的代码提取每个分组里面的内容:

    python 复制代码
    import re
    
    content = """张三,手机号码15945678901
    李四,手机号码13945677701
    王二,手机号码13845666901
    """
    
    p = re.compile('^(?P<name>.+),.+(?P<phone>\d{11})', re.M)
    for v in p.finditer(content):
        print(v.group('name'))
        print(v.group('phone'))
    # 张三
    # 15945678901
    # 李四
    # 13945677701
    # 王二
    # 13845666901
  • .去匹配换行。

    需要 点也匹配换行符 ,可以使用 DOTALL 参数

    python 复制代码
    content = '''
    <div class="el">
            <p class="t1">           
                <span>
                    <a>Python开发工程师</a>
                </span>
            </p>
            <span class="t2">南京</span>
            <span class="t3">1.5-2万/月</span>
    </div>
    <div class="el">
            <p class="t1">
                <span>
                    <a>java开发工程师</a>
                </span>
            </p>
            <span class="t2">苏州</span>
            <span class="t3">1.5-2/月</span>
    </div>
    '''
    
    import re
    p = re.compile(r'class=\"t1\">.*?<a>(.*?)</a>', re.DOTALL)
    for one in  p.findall(content):
        print(one)
    # Python开发工程师
    # java开发工程师

切割字符串

字符串 对象的 split 方法只适用于 简单的字符串分割。 有时,你需要更加灵活的字符串切割。

比如,我们需要从下面字符串中提取武将的名字。

复制代码
names = '关羽; 张飞, 赵云,马超, 黄忠  李逵'

我们发现这些名字之间, 有的是分号隔开,有的是逗号隔开,有的是空格隔开, 而且分割符号周围还有不定数量的空格

这时,可以使用正则表达式里面的 split 方法:

python 复制代码
import re

names = '关羽; 张飞, 赵云,   马超, 黄忠  李逵'

namelist = re.split(r'[;,\s]\s*', names)
print(' '.join(namelist))
# 关羽 张飞 赵云 马超 黄忠 李逵

字符串替换

python 复制代码
import re

names = '''

下面是这学期要学习的课程:

<a href='https://www.bilibili.com/video/av66771949/?p=1' target='_blank'>点击这里,边看视频讲解,边学习以下内容</a>
这节讲的是牛顿第2运动定律

<a href='https://www.bilibili.com/video/av46349552/?p=125' target='_blank'>点击这里,边看视频讲解,边学习以下内容</a>
这节讲的是毕达哥拉斯公式

<a href='https://www.bilibili.com/video/av90571967/?p=33' target='_blank'>点击这里,边看视频讲解,边学习以下内容</a>
这节讲的是切割磁力线
'''

newStr = re.sub(r'/av\d+/', '/cn345677/' , names)
print(newStr)
"""
下面是这学期要学习的课程:

<a href='https://www.bilibili.com/video/cn345677/?p=1' target='_blank'>点击这里,边看视频讲解,边学习以下内容</a>
这节讲的是牛顿第2运动定律

<a href='https://www.bilibili.com/video/cn345677/?p=125' target='_blank'>点击这里,边看视频讲解,边学习以下内容</a>
这节讲的是毕达哥拉斯公式

<a href='https://www.bilibili.com/video/cn345677/?p=33' target='_blank'>点击这里,边看视频讲解,边学习以下内容</a>
这节讲的是切割磁力线
"""

高级替换

python 复制代码
import re

names = '''

下面是这学期要学习的课程:

<a href='https://www.bilibili.com/video/av66771949/?p=1' target='_blank'>点击这里,边看视频讲解,边学习以下内容</a>
这节讲的是牛顿第2运动定律

<a href='https://www.bilibili.com/video/av46349552/?p=125' target='_blank'>点击这里,边看视频讲解,边学习以下内容</a>
这节讲的是毕达哥拉斯公式

<a href='https://www.bilibili.com/video/av90571967/?p=33' target='_blank'>点击这里,边看视频讲解,边学习以下内容</a>
这节讲的是切割磁力线
'''

# 替换函数,参数是 Match对象
def subFunc(match):
    # Match对象 的 group(0) 返回的是整个匹配上的字符串, 
    src = match.group(0)
    print(src)
    # Match对象 的 group(1) 返回的是第一个group分组的内容
    print(match.group(1))
    number = int(match.group(1)) + 6
    dest = f'/av{number}/'

    print(f'{src} 替换为 {dest}')

    # 返回值就是最终替换的字符串
    return dest

newStr = re.sub(r'/av(\d+)/', subFunc , names)
print(newStr)
""" 
下面是这学期要学习的课程:

<a href='https://www.bilibili.com/video/av66771955/?p=1' target='_blank'>点击这里,边看视频讲解,边学习以下内容</a>
这节讲的是牛顿第2运动定律

<a href='https://www.bilibili.com/video/av46349558/?p=125' target='_blank'>点击这里,边看视频讲解,边学习以下内容</a>
这节讲的是毕达哥拉斯公式

<a href='https://www.bilibili.com/video/av90571973/?p=33' target='_blank'>点击这里,边看视频讲解,边学习以下内容</a>
这节讲的是切割磁力线

"""
相关推荐
VidDown3 小时前
24fps 转 25fps 不只是改个数字:帧率转换、PAL/NTSC 与音频补偿
python·网络协议·音视频·视频编解码·视频
遇印记5 小时前
传输层,网络层
运维·服务器·网络·windows·学习
死磕音视频5 小时前
让小模型做选择题:限定候选项并读取 logits 概率的入门实践(附 Python 代码)
开发语言·python·大模型·文本分类·transformers
凤山老林5 小时前
Spring Boot 接入国密 SM2/SM3/SM4 的一些实践记录
spring boot·后端·python
clorinda6 小时前
PyQt5学习:从界面搭建到与机器学习实战
学习
pride.li7 小时前
第03章 Python 教程-基础语法:注释与变量
服务器·前端·后端·python·算法·计算机视觉
databook7 小时前
用 Pydantic AI 从零搭建一个能干活的 AI Agent
人工智能·python
康小旺7 小时前
把 markitdown 做成 Windows 桌面版:拖进文档就出 Markdown,附 233MB→64MB 打包裁剪全过程
python
欣欣之王来了8 小时前
Vue3项目脚手架:Vite vs Vue CLI怎么选?
前端·学习·架构·项目·vue3教程
kaixin_啊啊8 小时前
【零基础学AI】第 7 章——让 AI 辅助学习和办公
人工智能·学习