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

"""
相关推荐
南宫生30 分钟前
力扣-图论-17【算法学习day.67】
java·学习·算法·leetcode·图论
sanguine__1 小时前
Web APIs学习 (操作DOM BOM)
学习
蓝天星空1 小时前
Python调用open ai接口
人工智能·python
jasmine s1 小时前
Pandas
开发语言·python
郭wes代码1 小时前
Cmd命令大全(万字详细版)
python·算法·小程序
leaf_leaves_leaf2 小时前
win11用一条命令给anaconda环境安装GPU版本pytorch,并检查是否为GPU版本
人工智能·pytorch·python
夜雨飘零12 小时前
基于Pytorch实现的说话人日志(说话人分离)
人工智能·pytorch·python·声纹识别·说话人分离·说话人日志
404NooFound2 小时前
Python轻量级NoSQL数据库TinyDB
开发语言·python·nosql
天天要nx2 小时前
D102【python 接口自动化学习】- pytest进阶之fixture用法
python·pytest
minstbe2 小时前
AI开发:使用支持向量机(SVM)进行文本情感分析训练 - Python
人工智能·python·支持向量机