python正则模块—re
Posted _雪辉_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python正则模块—re相关的知识,希望对你有一定的参考价值。
文章目录
- 一、python正则模块re
- 二、正则模块语法规则
- 三、re模块语法
- 3.1 re.A(re.ASCII)
- 3.2 re.I(re.IGNORECASE)
- 3.3 re.L(re.LOCALE)
- 3.4 re.M(re.MULTILINE)
- 3.5 re.S(re.DOTALL)
- 3.6 re.compile(pattern,flags = 0 )
- 3.6 re.search(pattern,string,flags = 0 )
- 3.7 re.match(pattern,string,flags = 0 )
- 3.8 re.fullmatch(pattern,string,flags = 0 )
- 3.9 re.split(pattern,string,maxsplit = 0,flags = 0 )
- 3.10 re.findall(pattern,string,flags = 0 )
- 3.11 re.finditer(pattern,string,flags = 0 )
- 3.12 re.sub(pattern,repl,string,count = 0,flags = 0 )
- 3.13 re.subn(pattern,repl,string,count = 0,flags = 0 )
- 3.14 re.escape(pattern)
- 四、常用正则
一、python正则模块re
re模块是python独有的匹配字符串的模块,该模块中提供的很多功能是基于正则表达式实现的,而正则表达式是对字符串进行模糊匹配,提取自己需要的字符串部分。
- re模块是python独有的
- 正则表达式所有编程语言都可以使用
- re模块、正则表达式是对字符串进行操作
二、正则模块语法规则
三、re模块语法
3.1 re.A(re.ASCII)
让\\w,\\W,\\b,\\B,\\d,\\D,\\s和\\S 执行ASCII-只匹配完整的Unicode匹配代替。这仅对Unicode模式有意义,而对于字节模式则忽略。
3.2 re.I(re.IGNORECASE)
执行不区分大小写的匹配;类似的表达式也[A-Z]将匹配小写字母。
3.3 re.L(re.LOCALE)
让\\w,\\W,\\b,\\B和区分大小写的匹配取决于当前的语言环境。该标志只能与字节模式一起使用。不建议使用此标志,因为语言环境机制非常不可靠,它一次只能处理一种“区域性”,并且仅适用于8位语言环境。默认情况下,Python 3中已为Unicode(str)模式启用了Unicode匹配,并且能够处理不同的语言环境/语言。
3.4 re.M(re.MULTILINE)
指定时,模式字符’‘在字符串的开头和每行的开头(紧随每个换行符之后)匹配;模式字符’‘在字符串的末尾和每行的末尾(紧接在每个换行符之前)匹配。默认情况下,’’ 仅在字符串的开头,字符串’'的末尾和字符串末尾的换行符(如果有)之前立即匹配。
3.5 re.S(re.DOTALL)
使’.‘特殊字符与任何字符都匹配,包括换行符;没有此标志,’.'将匹配除换行符以外的任何内容。
3.6 re.compile(pattern,flags = 0 )
将正则表达式模式编译为正则表达式对象,可使用match(),search()以及下面所述的其他方法将其用于匹配
3.6 re.search(pattern,string,flags = 0 )
扫描字符串以查找正则表达式模式产生匹配项的第一个位置 ,然后返回相应的match对象。None如果字符串中没有位置与模式匹配,则返回;否则返回false。请注意,这与在字符串中的某个点找到零长度匹配不同。
3.7 re.match(pattern,string,flags = 0 )
如果字符串开头的零个或多个字符与正则表达式模式匹配,则返回相应的匹配对象。None如果字符串与模式不匹配,则返回;否则返回false。请注意,这与零长度匹配不同,不过在字符串开始处进行匹配,只会匹配一个对象
3.8 re.fullmatch(pattern,string,flags = 0 )
如果整个字符串与正则表达式模式匹配,则返回相应的match对象。None如果字符串与模式不匹配,则返回;否则返回false。请注意,这与零长度匹配不同。
3.9 re.split(pattern,string,maxsplit = 0,flags = 0 )
通过出现模式来拆分字符串。如果在pattern中使用了捕获括号,那么模式中所有组的文本也将作为结果列表的一部分返回。如果maxsplit不为零,则最多会发生maxsplit分割,并将字符串的其余部分作为列表的最后一个元素返回。
3.10 re.findall(pattern,string,flags = 0 )
以string列表形式返回string中pattern的所有非重叠匹配项。从左到右扫描该字符串,并以找到的顺序返回匹配项。如果该模式中存在一个或多个组,则返回一个组列表;否则,返回一个列表。如果模式包含多个组,则这将是一个元组列表。空匹配项包含在结果中。
3.11 re.finditer(pattern,string,flags = 0 )
返回一个迭代器,该迭代器在string类型的RE 模式的所有非重叠匹配中产生匹配对象。 从左到右扫描该字符串,并以找到的顺序返回匹配项。空匹配项包含在结果中。
3.12 re.sub(pattern,repl,string,count = 0,flags = 0 )
返回通过用替换repl替换字符串中最左边的不重叠模式所获得的字符串。如果找不到该模式, 则返回的字符串不变。 repl可以是字符串或函数;如果是字符串,则处理其中的任何反斜杠转义。即,将其转换为单个换行符,将其转换为回车,依此类推。count参数表示将匹配到的内容进行替换的次数
3.13 re.subn(pattern,repl,string,count = 0,flags = 0 )
执行与相同的操作sub(),但返回一个元组。(new_string, number_of_subs_made)
3.14 re.escape(pattern)
escape中的所有字符图案,除了ASCII字母,数字和’_’。如果要匹配可能包含正则表达式元字符的任意文字字符串,这将很有用。
四、常用正则
一、校验数字的表达式
数字:^[0-9]*$
n位的数字:^\\d{n}$
至少n位的数字:^\\d{n,}$
m-n位的数字:^\\d{m,n}$
零和非零开头的数字:^(0|[1-9][0-9]*)$
非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(\\.[0-9]{1,2})?$
带1-2位小数的正数或负数:^(\\-)?\\d+(\\.\\d{1,2})$
正数、负数、和小数:^(\\-|\\+)?\\d+(\\.\\d+)?$
有两位小数的正实数:^[0-9]+(\\.[0-9]{2})?$
有1~3位小数的正实数:^[0-9]+(\\.[0-9]{1,3})?$
非零的正整数:^[1-9]\\d*$ 或 ^([1-9][0-9]*){1,3}$ 或 ^\\+?[1-9][0-9]*$
非零的负整数:^\\-[1-9][]0-9"*$ 或 ^-[1-9]\\d*$
非负整数:^\\d+$ 或 ^[1-9]\\d*|0$
非正整数:^-[1-9]\\d*|0$ 或 ^((-\\d+)|(0+))$
非负浮点数:^\\d+(\\.\\d+)?$ 或 ^[1-9]\\d*\\.\\d*|0\\.\\d*[1-9]\\d*|0?\\.0+|0$
非正浮点数:^((-\\d+(\\.\\d+)?)|(0+(\\.0+)?))$ 或 ^(-([1-9]\\d*\\.\\d*|0\\.\\d*[1-9]\\d*))|0?\\.0+|0$
正浮点数:^[1-9]\\d*\\.\\d*|0\\.\\d*[1-9]\\d*$ 或 ^(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*))$
负浮点数:^-([1-9]\\d*\\.\\d*|0\\.\\d*[1-9]\\d*)$ 或 ^(-(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*)))$
浮点数:^(-?\\d+)(\\.\\d+)?$ 或 ^-?([1-9]\\d*\\.\\d*|0\\.\\d*[1-9]\\d*|0?\\.0+|0)$
校验字符的表达式
汉字:^[\\u4e00-\\u9fa5]{0,}$
英文和数字:^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$
长度为3-20的所有字符:^.{3,20}$
由26个英文字母组成的字符串:^[A-Za-z]+$
由26个大写英文字母组成的字符串:^[A-Z]+$
由26个小写英文字母组成的字符串:^[a-z]+$
由数字和26个英文字母组成的字符串:^[A-Za-z0-9]+$
由数字、26个英文字母或者下划线组成的字符串:^\\w+$ 或 ^\\w{3,20}$
中文、英文、数字包括下划线:^[\\u4E00-\\u9FA5A-Za-z0-9_]+$
中文、英文、数字但不包括下划线等符号:^[\\u4E00-\\u9FA5A-Za-z0-9]+$ 或 ^[\\u4E00-\\u9FA5A-Za-z0-9]{2,20}$
可以输入含有^%&',;=?$\\"等字符:[^%&',;=?$\\x22]+
禁止输入含有~的字符:[^~\\x22]+
三、特殊需求表达式
Email地址:^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$
域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+\\.?
InternetURL:[a-zA-z]+://[^\\s]* 或 ^http://([\\w-]+\\.)+[\\w-]+(/[\\w-./?%&=]*)?$
手机号码:^(13[0-9]|14[5|7]|15[0|1|2|3|4|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\\d{8}$
电话号码("XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX):^(\\(\\d{3,4}-)|\\d{3.4}-)?\\d{7,8}$
国内电话号码(0511-4405222、021-87888822):\\d{3}-\\d{8}|\\d{4}-\\d{7}
电话号码正则表达式(支持手机号码,3-4位区号,7-8位直播号码,1-4位分机号): ((\\d{11})|^((\\d{7,8})|(\\d{4}|\\d{3})-(\\d{7,8})|(\\d{4}|\\d{3})-(\\d{7,8})-(\\d{4}|\\d{3}|\\d{2}|\\d{1})|(\\d{7,8})-(\\d{4}|\\d{3}|\\d{2}|\\d{1}))$)
身份证号(15位、18位数字),最后一位是校验位,可能为数字或字符X:(^\\d{15}$)|(^\\d{18}$)|(^\\d{17}(\\d|X|x)$)
帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线):^[a-zA-Z]\\w{5,17}$
强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在 8-10 之间):^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9]{8,10}$
强密码(必须包含大小写字母和数字的组合,可以使用特殊字符,长度在8-10之间):^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$
日期格式:^\\d{4}-\\d{1,2}-\\d{1,2}
一年的12个月(01~09和1~12):^(0?[1-9]|1[0-2])$
一个月的31天(01~09和1~31):^((0?[1-9])|((1|2)[0-9])|30|31)$
钱的输入格式:
有四种钱的表示形式我们可以接受:"10000.00" 和 "10,000.00", 和没有 "分" 的 "10000" 和 "10,000":^[1-9][0-9]*$
这表示任意一个不以0开头的数字,但是,这也意味着一个字符"0"不通过,所以我们采用下面的形式:^(0|[1-9][0-9]*)$
一个0或者一个不以0开头的数字.我们还可以允许开头有一个负号:^(0|-?[1-9][0-9]*)$
这表示一个0或者一个可能为负的开头不为0的数字.让用户以0开头好了.把负号的也去掉,因为钱总不能是负的吧。下面我们要加的是说明可能的小数部分:^[0-9]+(.[0-9]+)?$
必须说明的是,小数点后面至少应该有1位数,所以"10."是不通过的,但是 "10" 和 "10.2" 是通过的:^[0-9]+(.[0-9]{2})?$
这样我们规定小数点后面必须有两位,如果你认为太苛刻了,可以这样:^[0-9]+(.[0-9]{1,2})?$
这样就允许用户只写一位小数.下面我们该考虑数字中的逗号了,我们可以这样:^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$
1到3个数字,后面跟着任意个 逗号+3个数字,逗号成为可选,而不是必须:^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$
备注:这就是最终结果了,别忘了"+"可以用"*"替代如果你觉得空字符串也可以接受的话(奇怪,为什么?)最后,别忘了在用函数时去掉去掉那个反斜杠,一般的错误都在这里
xml文件:^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\\\.[x|X][m|M][l|L]$
中文字符的正则表达式:[\\u4e00-\\u9fa5]
双字节字符:[^\\x00-\\xff] (包括汉字在内,可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1))
空白行的正则表达式:\\n\\s*\\r (可以用来删除空白行)
html标记的正则表达式:<(\\S*?)[^>]*>.*?|<.*? /> ( 首尾空白字符的正则表达式:^\\s*|\\s*$或(^\\s*)|(\\s*$) (可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式)
腾讯QQ号:[1-9][0-9]{4,} (腾讯QQ号从10000开始)
中国邮政编码:[1-9]\\d{5}(?!\\d) (中国邮政编码为6位数字)
IPv4地址:((2(5[0-5]|[0-4]\\d))|[0-1]?\\d{1,2})(\\.((2(5[0-5]|[0-4]\\d))|[0-1]?\\d{1,2})){3}
以上是关于python正则模块—re的主要内容,如果未能解决你的问题,请参考以下文章