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>
这节讲的是切割磁力线

"""
相关推荐
大丈夫立于天地间28 分钟前
ISIS基础知识
网络·网络协议·学习·智能路由器·信息与通信
通信.萌新44 分钟前
OpenCV边沿检测(Python版)
人工智能·python·opencv
Bran_Liu1 小时前
【LeetCode 刷题】字符串-字符串匹配(KMP)
python·算法·leetcode
weixin_307779131 小时前
分析一个深度学习项目并设计算法和用PyTorch实现的方法和步骤
人工智能·pytorch·python
Chambor_mak1 小时前
stm32单片机个人学习笔记14(USART串口数据包)
stm32·单片机·学习
Channing Lewis2 小时前
flask实现重启后需要重新输入用户名而避免浏览器使用之前已经记录的用户名
后端·python·flask
Channing Lewis2 小时前
如何在 Flask 中实现用户认证?
后端·python·flask
PaLu-LI2 小时前
ORB-SLAM2源码学习:Initializer.cc⑧: Initializer::CheckRT检验三角化结果
c++·人工智能·opencv·学习·ubuntu·计算机视觉
水银嘻嘻2 小时前
【Mac】Python相关知识经验
开发语言·python·macos
yuanbenshidiaos2 小时前
【大数据】机器学习----------计算机学习理论
大数据·学习·机器学习