正则表达式
正则表达式,简称为regex,是文本模式的描述方法。例如,d是一个正则表达式,表示一位数字字符,即任何一位0到9的数字。 使用步骤 python中所有正则表达式的函数都在re模块中。 ?python中使用正则表达式的步骤如下: ①用import re导入正则表达式模块; ②用re.compile()函数创建一个Regex对象。 ③向Regex对象的search()方法传入想查找的字符串。它返回一个Match对象。 ④调用Match对象的group()方法,返回实际匹配文本的字符串。 字符分类 字符类型 字符含义 d 0到9的任何数字 D 除0到9的数字以外的任何字符 w 任何字母、数字或下划线(单词) W 除字母、数字和下划线以外的任何字符 s 空格、制表符或换行符(空白) S 除空格、制表符和换行符以外的任何字符 正则表达式符号 ? 匹配零次或一次前面的分组 * 匹配零次或多次前面的分组 + 匹配一次或多次前面的分组 | 匹配多个表达式中的一个 () 使用括号创建"分组" {n} 匹配n次前面的分组 {n,} 匹配n次或更多前面的分组 {,m} 匹配零次到m次前面的分组 {n,m} 匹配至少n次、至多m次前面的分组 {n,m}?或*?或+? 对前面的分组进行非贪心匹配 ^spam 字符串必须以spam开始 spam$ 字符串必须以spam结束 . 匹配所有字符,换行符除外 d、w和s 匹配数字、单词和空格 D、W和S 匹配出数字、单词和空格外的所有字符 [abc] 匹配方括号内的任何字符 [^abc] 匹配不在方括号内的任何字符 正则表达式方法 1、compile() 向re.compile()传入一个字符串值,表示正则表达式,它将返回一个Regex模式对象。 如果要忽略正则表达式字符串中的空白符和注释,可以传入变量re.VERBOSE。 如果要不区分大小写,可以传入re.IGNORECASE或re.I。 如果要句点字符匹配换行,可以传入re.DOTALL。 re.compile()函数只接受一个值作为它的第二参数,可以用管道符将变量组合起来,从而绕过这个限制。 >>>importre >>>phoneNum=re.compile(r'ddd-dddddddd') 2、group() Match对象有一个group()方法,它返回被查找字符串中实际匹配的文本。 添加括号将在正则表达式中创建”分组“。正则表达式字符串中的第一对括号是第1组。第二对括号是第2组。向group()匹配对象方法传入整数1或2,就可以取得匹配文本的不同部分。向group()方法传入0或不传入参数,将返回整个匹配的文本。如果想要一次就获得所有的分组,就使用groups()方法。 >>>importre >>>phoneNum=re.compile(r'(ddd)-(dddddddd)') >>>mo=phoneNum.search('Mynumberis021-68000000') >>>print(mo.group(0)) 021-68000000 >>>print(mo.group(1)) 021 >>>print(mo.group(2)) 68000000 >>>print(mo.groups()) ('021','68000000') 3、search() Regex对象的search()方法查找传入的字符串,寻找该正则表达式的所有匹配。如果字符串中没有找到该正则表达式模式,search()方法将返回None。如果找到了该模式,search()方法将返回一个Match对象。 >>>importre >>>phoneNum=re.compile(r'ddd-dddddddd') >>>mo=phoneNum.search('Mynumberis021-68000000') >>>print(mo.group()) 021-68000000 4、findall() search()将返回一个Match对象,包含被查找字符串中的”第一次“匹配的文本,而findall()方法将返回一组字符串,包含被查找字符串中的所有匹配。 ?作为findall()方法的返回结果,有如下两点需要注意: ①如果调用在一个没有分组的正则表达式上,例如ddd-ddd-dddd,将返回一个匹配字符串的列表,如['123-456-7890','000-000-0000']。 ②如果调用在一个有分组的正则表达式上,例如(ddd)-(ddd)-(dddd),将返回一个字符串的元组的列表,如[('123','456','7890'),('000','000','0000')] >>>importre >>>phoneNum=re.compile(r'(ddd)') >>>phoneNum.search('68000000') <_sre.SRE_Matchobject;span=(0,3),match='680'> >>>phoneNum.findall('68000000') ['680','000'] 5、sub() sub()方法需要传入两个参数。第一个参数是一个字符串,用于取代发现的匹配。第二个参数是一个字符串,即正则表达式。sub()方法返回替换完成后的字符串。 >>>importre >>>phoneNum=re.compile(r'021-6800') >>>phoneNum.sub('8800','Mynumberis021-68000000.') 'Mynumberis88000000.' 贪心与非贪心 python的正则表达式默认是”贪心“的,这表示在有二义的情况下,它们会尽可能匹配最长的字符串。花括号的”非贪心“版本匹配尽可能短的字符串,即在结束的花括号后跟一个问号。 问号在正则表达式中可能有两种含义:声明非贪心匹配或表示可选的分组。这两种含义是完全无关的。 >>>importre >>>phoneNum01=re.compile(r'(ddd){1,3}') >>>phoneNum02=re.compile(r'(ddd){1,3}?') >>>mo01=phoneNum01.search('68000000') >>>mo02=phoneNum02.search('68000000') >>>mo01.group() '680000' >>>mo02.group() '680' (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- XML error: undefined entity
- ruby-on-rails – webkit_server无法找到可执行文件
- react native学习笔记4——FlexBox布局
- ruby-on-rails – 相对于rails中的绝对url
- $.ajax not working in chrome but is working in firefox
- objective-c – 我如何在Objective C中创建和填充NSArray有
- ACE反应器(Reactor)模式
- 贡献一个PostgreSQL的备份脚本(原创)
- SQlite数据库的C编程接口(六) 返回值和错误码(Result Co
- Flex中Number型去除空值(NaN)