当前位置: 首页 > ai >正文

详解python之re库使用方法2

目录

  • 参考资料
  • 前言
  • 二、使用 re 模块匹配字符串
    • 0. re 子函数
  • 1. re.split()
    • 1.实例演示
  • 2. re.search() 和 re.match()对比
  • 3.re.search()
  • 4.re.findall()
  • 5.re.escape()
  • 6. 正则表达式的简单说明
  • 8. re.compile
  • re.match() 方法进行匹配
    • 参考链接:

参考资料

[1] Python之正则表达式细讲 2023.2;
[2] Python之re库用法细讲 2023.3;
[3]
一、使用 re 模块的前期准备工作
二、使用 re 模块匹配字符串

  1. 使用 match() 方法进行匹配
  2. 使用 search() 方法进行匹配
  3. 使用 findall() 方法进行匹配
    三、使用 re 模块替换字符串
    四、使用 re 模块分割字符串

前言

Python语言专门提供了 re 模块,用于实现正则表达式的操作。我们使用较多的场景是,使用 re 模块提供的方法(如 search()、match()、findall()等)进行字符串处理,也可以先使用 re 模块的 compile() 方法将模式字符串转换为正则表达式对象,然后再使用该正则表达式对象的相关方法来操作字符串,接下来就跟大家介绍一下 re 模块的详细用法。

二、使用 re 模块匹配字符串

re 模块中提供了 match()、search() 和 findall() 等方法专门用来匹配字符串,可以从海量数据中精确筛选出需要的对象,我们逐一来看看每种方法的具体实现。

  1. 使用 match() 方法进行匹配
      match() 方法用于从字符串的开始处进行匹配,如果在起始位置匹配成功,则返回 Match 对象,否则返回 None。其语法格式如下:
re.match(pattern, string, [flags])

0. re 子函数

re 模块中提供了 match()search()findall() 等方法专门用来匹配字符串,可以从海量数据中精确筛选出需要的对象。
在这里插入图片描述

1. re.split()

1.实例演示

实例 1

import re
s = 'abc,  abc,  defg,  dds'
re.split('\W+', s)  # 说明:\W 匹配任何非单词字符,任何字母# 运行结果:
['abc', 'abc', 'defg', 'dds']

实例 2

import re
s = 'abc,  abc,  defg,  dds'
re.split('(\W+)', s)  # 说明:如果加上括号或'[]',结果会同时返回去掉的值# 运行结果:
['abc', ',  ', 'abc', ',  ', 'defg', ',  ', 'dds']

实例 3

import re
s = 'abc,  abc,  defg,  dds'
re.split('(\W+)', s, 1)  # 说明:当前字符串只切分1次运行结果:
['abc', ',  ', 'abc,  defg,  dds']

实例 4

import re
s = 'abc,  abc,  defg,  dds'
re.split('wxy*', s)  # 说明:没有可匹配的项,返回原来的字符串。运行结果:
['abc,  abc,  defg,  dds']

实例 5

import re
line = 'aaa bbb ccc;ddd   eee,fff'
re.split(r'[;,]',line)  # 两个字符以上切割需要放在 [ ] 中运行结果:
['aaa bbb ccc', 'ddd   eee', 'fff']

实例 6

import re
line = 'aaa bbb ccc;ddd   eee,fff'
re.split(r'[;,\s]',line)  # 所有空白字符切割运行结果:
['aaa', 'bbb', 'ccc', 'ddd', '', '', 'eee', 'fff']

实例 7

import refile_name = 'F:\\02-data\\data_standar\\0224整年-Exported.csv'
print(re.split('[\\\, .]', file_name))['F:', '02-data', 'data_standar', '0224整年-Exported', 'csv']

实例8

>>> re.split(r'\W+', 'Words, words, words.')
# ['Words', 'words', 'words', '']
>>> re.split(r'(\W+)', 'Words, words, words.')
# ['Words', ', ', 'words', ', ', 'words', '.', '']
>>> re.split(r'\W+', 'Words, words, words.', 1)
# ['Words', 'words, words.']
>>> re.split('[a-f]+', '0a3B9', flags=re.IGNORECASE)
# ['0', '3', '9']
>>> re.split(r'(\W+)', '...words, words...')
# ['', '...', 'words', ', ', 'words', '...', '']
>>> re.split(r'\b', 'Words, words, words.')
# ['', 'Words', ', ', 'words', ', ', 'words', '.']

实例9

>>> re.split(r'\W*', '...words...')
# ['', '', 'w', 'o', 'r', 'd', 's', '', '']
>>> re.split(r'(\W*)', '...words...')
# ['', '...', '', '', 'w', '', 'o', '', 'r', '', 'd', '', 's', '...', '', '', '']
str(re.split('[-.]', 'filter_Molas_(2019-11-15_2020-03-28)_高层研究-山东泰山队.csv'))
Out[4]: "['filter_Molas_(2019', '11', '15_2020', '03', '28)_高层研究', '山东泰山队', 'csv']"
str(re.split('[-.]', 'filter_Molas_(2019-11-15_2020-03-28)_高层研究-山东泰山队.csv')[-2])
Out[5]: '山东泰山队'

实例10

案例:用split()函数分割一个字符串并转换成列表


import re
s = "abcabcacc"
l = re.split("b", s)
print('运行结果为:', l)#运行结果为:['a', 'ca', 'cacc']
re.split('\\\\', files[0]) 
Out[12]: 
['E:','02-data','02-profile','152-csv格式文件','filter-Exported.csv']
re.split('\\\\', files[0]) [-1]
Out[13]: 'filter-Exported.csv'
files[0]
Out[14]: 'E:\\02-data\\02-wind_profile\\152-csv格式文件\\filter-Exported.csv'

2. re.search() 和 re.match()对比

对id这一列,提取前面的数字部分

b = data.loc[:, 'id'].apply(lambda x: re.search('\d+', x).group())

语法

re.search(pattern, string, flags=0)

>>> re.match("c", "abcdef")    # No match
>>> re.search("c", "abcdef")   # Match
<re.Match object; span=(2, 3), match='c'>
>>> re.match("c", "abcdef")    # No match
>>> re.search("^c", "abcdef")  # No match
>>> re.search("^a", "abcdef")  # Match
<re.Match object; span=(0, 1), match='a'>
>>> re.match('X', 'A\nB\nX', re.MULTILINE)  # No match
>>> re.search('^X', 'A\nB\nX', re.MULTILINE)  # Match
<re.Match object; span=(4, 5), match='X'>

3.re.search()

>>> m = re.search(r'(?<=-)\w+', 'spam-egg')  # r'(?<=-)\w+',表示识别'<=-'这几个符号后边的单词或者数字,是'egg'
>>> m.group(0)
'egg'
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
ids_list = data.loc[:, 'id'].apply(lambda x: re.search('\d+', x).group())

x列元素为’‘00005’,‘‘00228’,……,‘‘00263’,带一个单引号,匹配后的结果为’00005’,‘00228’,……,‘00263’

4.re.findall()

>>> re.findall(r'\bf[a-z]*', 'which foot or hand fell fastest')
['foot', 'fell', 'fastest']
#r'\bfoo\b' matches 'foo', 'foo.', '(foo)', 'bar foo baz' but not 'foobar' or 'foo3'
>>> re.findall(r'(\w+)=(\d+)', 'set width=20 and height=10')
[('width', '20'), ('height', '10')]

在这里插入图片描述

5.re.escape()

>>> print(re.escape('https://www.python.org'))
https://www\.python\.org>>> legal_chars = string.ascii_lowercase + string.digits + "!#$%&'*+-.^_`|~:"
>>> print('[%s]+' % re.escape(legal_chars))
[abcdefghijklmnopqrstuvwxyz0123456789!\#\$%\&'\*\+\-\.\^_`\|\~:]+>>> operators = ['+', '-', '*', '/', '**']
>>> print('|'.join(map(re.escape, sorted(operators, reverse=True))))
/|\-|\+|\*\*|\*

6. 正则表达式的简单说明

正则表达式,由普通字符和元字符组成
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8. re.compile

在这里插入图片描述

# 使用正则表达式来切分句子,切分的规则是除单词,数字外的任意字符串
regEx = re.compile(r'[-_\s]')  
p1 = regEx.split(s1.lower())# [\u4e00-\u9fa5]中文范围,在PyCharm中,将中文或单词拆为1个1个的字母或汉字
res = re.compile(r"([\u4e00-\u9fa5]+)")  

re.match() 方法进行匹配

参考链接:

[1] python 中re.split()的用法 2019.9
[2] 百科:python正则表达式;
[3] Python 中re.split()方法 2019.9
[4] Python正则表达式 ;
[5] re — Regular expression operations¶ ;

http://www.xdnf.cn/news/11410.html

相关文章:

  • 网页版微信CRM系统,让微信管理更方便!
  • 新手如何搭建测试平台?
  • 从零开始搭建云呼叫中心之FreeSwitch实战
  • Android:制作Update.zip升级包
  • Android ComponentName的使用
  • 针不错!10+个综合资源网站,好用的很网站!
  • 什么是C语言?
  • ShellExecuteEx执行新进程,无需管理员权限写入注册表
  • C# ManagementObjectSearcher操作window案例详解
  • css边框border(含代码,易懂)
  • 怎样从零开始学习网络工程师?
  • notifyDataSetChanged()无效原因
  • 配置管理工具比较
  • 项目管理(PMP)真题解析(一)
  • 斑斓中国BlenderCN项目库
  • R︱并行计算以及提高运算效率的方式(parallel包、clusterExport函数、SupR包简介)
  • 常用的开源中文分词工具
  • Altium Designer 之 批量修改过孔盖油设置
  • 【Java】ResourceBundle 使用
  • 有关My97DatePicker日期插件的详细使用
  • csdn软件是干什么的?
  • 基于Booth算法的64位浮点乘法器的实现
  • 光纤专线与普通宽带区别(ASDL)
  • MP3中设置播放顺序的软件《闪存式MP3伴侣》
  • 玩转百度AI Studio 之 用“四十路泰坦”跑线性回
  • Oracle视图
  • 雷神加速器云顶之弈|PBE云顶S11赛季上线时间介绍
  • UltraEdit-32常用操作
  • 什么是Portlet
  • Samba使用LDAP对用户进行认证