定义
正则表达式是一种特殊的字符序列,可用于方便地检查字符串是否与某个模式匹配。 re 模块使 python 具有完整的正则表达式功能。
用途
通过使用正则表达式,可以:
测试字符串中的模式。 - 例如,你可以测试输入字符串以查看字符串中是否出现电话号码或信用卡号码的模式。这称为数据验证。
替换文字。 - 正则表达式可用于识别文档中的特定文本、完全删除该文本或将其替换为其他文本。
基于模式匹配从字符串中提取子字符串。 - 你可以在文档或输入字段中搜索特定文本。
语法
'.' 匹配所有字符串,除\n以外
'-' 表示范围[0-9]
'*' 匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*。
'+' 匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \+
'^' 匹配字符串开头
'$' 匹配字符串结尾 re
'\' 转义字符, 使后一个字符改变原来的意思,如果字符串中有字符*需要匹配,可以\*或者字符集[*]
re.findall(r'3\*','3*ds')结['3*']
'*' 匹配前面的字符0次或多次 re.findall("ab*","cabc3abcbbac")结果:['ab', 'ab', 'a']
'?' 匹配前一个字符串0次或1次 re.findall('ab?','abcabcabcadf')结果['ab', 'ab', 'ab', 'a']
'{m}' 匹配前一个字符m次 re.findall('cb{1}','bchbchcbfbcbb')结果['cb', 'cb']
'{n,m}' 匹配前一个字符n到m次 re.findall('cb{2,3}','bchbchcbfbcbb')结果['cbb']
'\d' 匹配数字,等于[0-9] re.findall('\d','电话:10086')结果['1', '0', '0', '8', '6']
'\D' 匹配非数字,等于[^0-9] re.findall('\D','电话:10086')结果['电', '话', ':']
'\w' 匹配字母和数字,等于[A-Za-z0-9] re.findall('\w','alex123,./;;;')结果['a', 'l', 'e', 'x', '1', '2', '3']
'\W' 匹配非英文字母和数字,等于[^A-Za-z0-9] re.findall('\W','alex123,./;;;')结果[',', '.', '/', ';', ';', ';']
'\s' 匹配空白字符 re.findall('\s','3*ds \t\n')结果[' ', '\t', '\n']
'\S' 匹配非空白字符 re.findall('\s','3*ds \t\n')结果['3', '*', 'd', 's']
'\A' 匹配字符串开头
'\Z' 匹配字符串结尾
'\b' 匹配单词的词首和词尾,单词被定义为一个字母数字序列,因此词尾是用空白符或非字母数字符来表示的
'\B' 与\b相反,只在当前位置不在单词边界时匹配
[] 是定义匹配的字符范围。比如 [a-zA-Z0-9] 表示相应位置的字符要匹配英文字符和数字。[\s*]表示空格或者*号
'(?P<name>...)' 分组,除了原有编号外在指定一个额外的别名
re.search("(?P<province>[0-9]{4})(?P<city>[0-9]{2})(?P<birthday>[0-9]{8})","371481199306143242").groupdict("city")
结果{'province': '3714', 'city': '81', 'birthday': '19930614'}
模式
贪婪模式和非贪婪模式
正则表达式通常用于查找匹配的字符串。 python中的量词默认是贪婪的,总是试图匹配尽可能多的字符;非贪婪模式则相反,总是试图匹配尽可能少的字符。
使用方法
在python中默认使用贪婪模式。如果使用非贪心模式,只需要加一个问号“?”直接在量词之后。
例子中,当“ab”已经匹配时,整个表达式可以匹配成功,但是由于使用了贪心模式,所以需要继续匹配,直到匹配到最后一个“b”,再没有匹配的字符串完成,匹配结束。返回匹配结果“abbbbbbbb”。因此,我们可以将贪心模式理解为:在整个表达式匹配成功的前提下,尽可能多的匹配。
非贪心模式是将我们例子中的正则表达式“ab+”改为“ab+?”,当匹配到“ab”时,就已经匹配成功,直接结束匹配,而不是继续向后尝试,返回匹配成功的字符串“ab”。
因此,我们可以将非贪心模式理解为:在整个表达式匹配成功的前提下,匹配的越少越好。
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ Python中如何使用带有yield的函数11/13
- ♥ python用什么方法列出一个文件夹下的所有文件?12/29
- ♥ 如何在python中的块中运行10/26
- ♥ python列表生成的两种语法11/26
- ♥ 如何在python中访问元组中的元素08/31
- ♥ python如何给函数和模块起别名09/12
内容反馈