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

"""
相关推荐
叶子2024221 分钟前
学习使用YOLO的predict函数使用
人工智能·学习·yolo
jackson凌4 分钟前
【Java学习笔记】SringBuffer类(重点)
java·笔记·学习
chao_7896 分钟前
链表题解——两两交换链表中的节点【LeetCode】
数据结构·python·leetcode·链表
大霞上仙1 小时前
nonlocal 与global关键字
开发语言·python
Mark_Aussie1 小时前
Flask-SQLAlchemy使用小结
python·flask
程序员阿龙2 小时前
【精选】计算机毕业设计Python Flask海口天气数据分析可视化系统 气象数据采集处理 天气趋势图表展示 数据可视化平台源码+论文+PPT+讲解
python·flask·课程设计·数据可视化系统·天气数据分析·海口气象数据·pandas 数据处理
ZHOU_WUYI2 小时前
Flask与Celery 项目应用(shared_task使用)
后端·python·flask
黑客老李2 小时前
JavaSec | SpringAOP 链学习分析
java·运维·服务器·开发语言·学习·apache·memcached
且慢.5892 小时前
Python_day47
python·深度学习·计算机视觉
佩奇的技术笔记2 小时前
Python入门手册:异常处理
python