python之常用正则表达式
以下整理python中常用的正则符号,相信能够熟悉掌握这些正则符号,大部分字符串处理将会游刃有余。
| 符号 | 含义 | 示例 |
| . | 可以匹配任意字符,但不包含换行符'\n' | Pyt.on ->Pytmon |
| \ | 转义符,一般用于保留字符串中的特殊元字符 | 10\.3 ->10.3 |
| | | 逻辑或 | 人a|A->人a或者人A |
| [] | 用于匹配的一组字符 | m[aA]n ->man 或者 mAn |
| \d与\D | \d匹配任意数字,\D代表所有的非\d | 今天\d号 ->今天3号 |
| \s与\S | \s匹配任意空白字符,\S代表所有非\s | 你\s好 ->你 好 |
| \w与\W | \w匹配字母数字和下划线,\W代表所有非\w | P\wy ->Pay 或者 P3y P_y |
| * | 匹配前一个字符0到无穷次 | OK* ->O或者OK 或 OKK |
| + | 匹配前一个字符1到无穷次 | OK+ ->OK或者OK 或 OKK |
| ? | 匹配前一个字符0到1次 | OK? ->O或者OK |
| {m} | 匹配前一个字符m次 | OK{3} ->OKKK |
| {m,n} | 匹配前一个字符m到n次 | OK{1,2} ->OK或者OKK |
另外 (.*?)用于分组,默认返回括号内的匹配内容,
在Python开发爬虫过程中经常会遇到正则表达式,其中(.*?) 的使用概率较高,那么这个正则表达式到底什么意思呢?
“.*?” 表示非贪心算法,表示要精确的配对。
“.*”表示贪心算法,表示要尽可能多的匹配
“()” 表示要获取括弧之间的信息。
基于正则表达式完成字符串的查询,替换和分割操作,这些操作都需要导入re模块,并使用如下几个函数。
1.匹配查询函数
findall(pattern, string, flags=0)
findall 函数可以对指定的字符串进行遍历匹配,获取字符串中所有匹配的子串,并返回一个列表结果。该函数的参数含义如下:
pattern:指定需要匹配的正则表达式。
string:指定待处理的字符flags:指定匹配模式,常用的值可以是re.I、re.M、re.S和re.X。
re.I的模式是让正则表达式对大小写不敏感;
re.M的模式是让正则表达式可以多行匹配;
re.S的模式指明正则符号.可以匹配任意字符,包括换行符\n;
re.X模式允许正则表达式可以写得更加详细,如多行表示、忽略空白字符、加入注释等。
2.匹配替换函数
sub(pattern, repl, string, count=0, flags=0)
sub函数的功能是替换,类似于字符串的replace方法,该函数根据正则表达式把满足匹配的内容替换为repl。该函数的参数含义如下:
pattern:同findall函数中的pattern。
repl: 指定替换成的新值。
string:同findall函数中的string。
count:用于指定最多替换的次数,默认为全部替换。
flags:同findall函数中的flags。
3.匹配分割函数
split(pattern, string, maxsplit=0, flags=0)
split函数是将字符串按照指定的正则表达式分隔开,类似于字符串的split方法。该函数的具体参数含义如下:
pattern:同findall函数中的pattern。
maxsplit:用于指定最大分割次数,默认为全部分割。
string:同findall函数中的string。
flags:同findall函数中的flags。
示例:
import re
string8 = "{ymd:'2018-01-01',tianqi:'晴',aqiInfo:'轻度污染'},{ymd:'2018-01-02',tianqi:'阴~小雨',aqiInfo:'优'},{ymd:'2018-01-03',tianqi:'小雨~中雨',aqiInfo:'优'},{ymd:'2018-01-04',tianqi:'中雨~小雨',aqiInfo:'优'}"
#取出字符串中所有的天气状态
print(re.findall("tianqi:'(.*?)' '',string8)) #此处注意观察,(.*?)' 这里面使用的是精确匹配,当匹配到后面是' 号就停止
string9="I don't want to be someone that you're settling for. I don't want to be someone that anyone settles for. "
print(re.findall('\w*o\w',string9,flags = re.I)) #此处留个缺陷" don't you're "匹配出来不是我们想要的结果,用于思考
##out:
['don', 'someon', 'you', 'for', 'don', 'someon', 'anyon', 'for']
string10 = '据路透社报道,由于土耳其军队离美军驻地已经过近,美军数架F-15战斗机和AH-64“阿帕奇”攻击直升机在土军阵地上方进行了威慑性飞行。'
print(re.sub('[,。,“”a-zA-Z0-9()]','',string10)) #将标点符号,数字和字母删除
out:
据路透社报道由于土耳其军队离美军驻地已经过近美军数架-战斗机和-阿帕奇攻击直升机在土军阵地上方进行了威慑性飞行
#将每一部分的内容分割开
string11 = '2室2厅 | 101.62平 |低区/7层 | 朝南 \n 上海未来 - 浦东-金杨 -2005年建'
split =re.split('[-\|\n]',string11) #[]列表内的所有符号作为分隔的标志
print(split)
split_strip = [i.strip() for i in split]
print(split_strip )
out:
['2室2厅', '101.62平', '低区/7层', '朝南', '上海未来', '浦东', '金杨', '2005年建']
python之常用正则表达式的更多相关文章
- python 正则,常用正则表达式大全
Nginx访问日志匹配 re.compile #re.compile 规则解释,改规则必须从前面开始匹配一个一个写到后面,前面一个修改后面全部错误.特殊标准结束为符号为空或者双引号: 改符号开始 从 ...
- Python:常用正则表达式(一)
文章转载于:http://www.cnblogs.com/Akeke/(博主:Akeke) https://www.cnblogs.com/Akeke/p/6649589.html (基于JavaSc ...
- python爬虫常用正则表达式组合匹配
["\']匹配什么?(.*?)匹配什么? ["\'] ----------- 匹配单双引号 (.*?)xxx ----------- 匹配任意长度字符+xxx ...
- [python] 常用正则表达式爬取网页信息及分析HTML标签总结【转】
[python] 常用正则表达式爬取网页信息及分析HTML标签总结 转http://blog.csdn.net/Eastmount/article/details/51082253 标签: pytho ...
- 常用正则表达式与python中的re模块
正则表达式是一种通用的字符串匹配技术,不会因为编程语言不一样而发生变化. 部分常用正则表达式规则介绍: . 匹配任意的一个字符串,除了\n * 匹配任意字符串0次或者任意次 \w 匹配字母.数字.下划 ...
- python基础之正则表达式
正则表达式语法 正则表达式 (或 RE) 指定一组字符串匹配它;在此模块中的功能让您检查一下,如果一个特定的字符串匹配给定的正则表达式 (或给定的正则表达式匹配特定的字符串,可归结为同一件事). 正则 ...
- Python::re 模块 -- 在Python中使用正则表达式
前言 这篇文章,并不是对正则表达式的介绍,而是对Python中如何结合re模块使用正则表达式的介绍.文章的侧重点是如何使用re模块在Python语言中使用正则表达式,对于Python表达式的语法和详细 ...
- python的re正则表达式模块学习
python中re模块的用法 Python 的 re 模块(Regular Expression 正则表达式)提供各种正则表达式的匹配操作,在文本解析.复杂字符串分析和信息提取时是一个非常有用的工 ...
- Python自动化 【第五篇】:Python基础-常用模块
目录 模块介绍 time和datetime模块 random os sys shutil json和pickle shelve xml处理 yaml处理 configparser hashlib re ...
随机推荐
- Java的常用类——Object类、String类
Java的JDK中提供给我们很多封装好的类就是Java API,可以直接调用. Java 的API(API: Application(应用) Programming(程序) Interface(接口) ...
- JavaFX让UI更美观-CSS样式
相对于Swing来说,JavaFX在UI上改善了很多,不仅可以通过FXML来排版布局界面,同时也可以通过CSS样式表来美化UI. 其实在开发JavaFX应用的时候,可以将FXML看做是HTML,这样跟 ...
- Python for循环通过序列索引迭代
Python for 循环通过序列索引迭代: 注:集合 和 字典 不可以通过索引进行获取元素,因为集合和字典都是无序的. 使用 len (参数) 方法可以获取到遍历对象的长度. 程序: strs = ...
- 自学java,学多久可以自己找到工作?
先以肯定的语气说明一下自学Java,多久可以找到工作: 按照目前Java的体系来说,Java的几个重点在于Javase.数据库.Spring全家桶系列的框架.而其他的在Java体系之内,会基础的操 ...
- 新手程序员求职简历缺少这 3 点!别说8k薪资,4K你可能都拿不到!
制作一份简历可能需要八百到千字,但HR看简历的时间只不过短短十秒,甚至可以说是一目十行. 我想针对想做程序员的刚毕业的学生分享着一点自己在求职招聘方面的感悟,不针对工作了多年的老同志了.快毕业那会儿, ...
- Pintech品致—示波器探头技术标准倡导者
Pintech品致是仪器仪表的品牌,全球示波器探头第一品牌,示波器探头技术标准倡导者:“两点浮动”电压测试创始人:世界知名品牌,泰克(Tektronix),罗德与施瓦茨R&S,是德(Keys ...
- [C#] (原创)一步一步教你自定义控件——01,TrackBar
一.前言 技术没有先进落后之分,只有合不合适. WinForm有着非常多的优点,在使用WinForm久了之后,难免会觉得WinForm自带的某些控件外观上有些许朴素.或者功能上有些不如意,自然而然便想 ...
- Python爬取招聘网站数据,给学习、求职一点参考
1.项目背景 随着科技的飞速发展,数据呈现爆发式的增长,任何人都摆脱不了与数据打交道,社会对于“数据”方面的人才需求也在不断增大.因此了解当下企业究竟需要招聘什么样的人才?需要什么样的技能?不管是对于 ...
- JS 仿京东放大镜
css代码 body{ margin:; } .box { width: 1210px; position: relative; background-color: pink; margin: 0 a ...
- Java并发--基础知识
一.为什么要用到并发 充分利用多核CPU的计算能力 方便进行业务拆分,提升应用性能 二.并发编程有哪些缺点 频繁的上下文切换 时间片是CPU分配给各个线程的时间,因为时间非常短,所以CPU不断通过切换 ...