正则表达式函数
re.match(); re.search(); 全局匹配函数;re.sub()
import re pat="aaaa" string="aaadaaaacbd" result=re.search(pat,string) print(result) pat2="ab" result2=re.search(pat2,string) print(result2) pat3="\n" string3="""abcd fghi""" result3=re.search(pat3,string3) print(result3)
讯享网
输出如下:
讯享网<re.Match object; span=(4, 8), match='aaaa'> None <re.Match object; span=(4, 5), match='\n'>
三个函数之间的比较,代码如下:
import re pat1="p.*?y" string="abc_python_abc_python" result1=re.search(pat1,string) print(result1) result2=re.match(pat1,string) print(result2) result3=re.compile(pat1).findall(string) print(result3) string2="py_python_anb_python" result4=re.match(pat1,string2) print(result4)
match函数匹配字符串是从字符串开头匹配的,假如开头没有找到,就不会继续找下去!而且他只会返回最先匹配到的字符串,也就是说,假如可能一个字符串中有两个可以匹配的地方,他只会返回最先匹配到的那部分!
search 函数和match函数有个相同点就是,他只会返回最先匹配到那部分字符串!但是他和match不用的是,他不会只局限于在字符串的开头查找,他会查找整个字符串,直到找到匹配的部分为止!
findAll函数不但会查找整个字符串,并且会将匹配到的所有字符返回!而不仅限于返回第一个匹配到的!他会将返回的所有字符装载到一个列表对象返回.
注:除了常用字符外,非打印字符也可作为正则表达式的组成单位。
常见通用字符
| 符号 | 意义 |
| \w | 匹配字母数字及下划线 |
| \W | 匹配非字母数字及下划线 |
| \d | 匹配任意数字,等价于 [0-9]. |
| \D | 匹配任意非数字 |
| \s | 匹配任意空白字符,等价于 [\t\n\r\f]. |
| \S | 匹配任意非空字符 |
| [...] | 原子表,比如ab[cdf]则可以符合abc,abd,abf |
| . | 匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用象 '[.\n]' 的模式。 |
| ^ | 匹配字符串的开头 |
| $ | 匹配字符串的末尾 |
| re* | 匹配0个或多个的表达式。 |
| re? | 匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式 |
| re+ | 匹配1个或多个的表达式 |
| re{n} | 精确匹配 n 个前面表达式。例如, o{2} 不能匹配 "Bob" 中的 "o",但是能匹配 "food" 中的两个 o。 |
| re{n,} | 匹配 n 个前面表达式。例如, o{2,} 不能匹配"Bob"中的"o",但能匹配 "foooood"中的所有 o。"o{1,}" 等价于 "o+"。"o{0,}" 则等价于 "o*"。 |
| re{ n,m} | 匹配 n 到 m 次由前面的正则表达式定义的片段,贪婪方式 |
| a| b | 匹配a或b |
| (re) | 匹配括号内的表达式,也表示一个组,通常用于提取某内容 |
通用字符使用范例如下:
讯享网#\w,\d,\s import re pat1="\w\dpython\sab\w" string="11python abdcaaaaaa" result=re.search(pat1,string) print(result)
输出如下:
<re.Match object; span=(0, 12), match='11python abd'>
讯享网#[] import re pat1="\w\df[acd]d" string="22faddd" result=re.search(pat1,string) print(result)
输出如下:
<re.Match object; span=(0, 5), match='22fad'>
讯享网#.,^ pat1="^abc\w." string1="abcdefg" result1=re.search(pat1,string1) print(result1) string2="aabcdefg" result2=re.search(pat1,string2) print(result2)
输出如下:
<re.Match object; span=(0, 5), match='abcde'> None
讯享网#|,[] import re pat1="python|jav[ab]" string1="pythona" result1=re.search(pat1,string1) print(result1) string2="javaph" result2=re.search(pat1,string2) print(result2)
输入如下:
<re.Match object; span=(0, 6), match='python'> <re.Match object; span=(0, 4), match='java'>
讯享网#*,?,+ pat1="a*b?.c+..n{2,4}" string1="bmccaannnaaaaa" result1=re.search(pat1,string1) print(result1)
输出如下:
<re.Match object; span=(0, 9), match='bmccaannn'>
模式修正符:
可以在不改变正则表达式的情况下,通过模式修正符改变正则表达式的含义,从而实现一些匹配结果的调整等功能
| 修饰符 | 描述 |
| re.I | 使匹配对大小写不敏感 |
| re.L | 做本地化识别(locale-aware)匹配 |
| re.M | 多行匹配,影响 ^ 和 $ |
| re.S | 使 . 匹配包括换行在内的所有字符 |
| re.U | 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B. |
| re.X | 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。 |
讯享网#re.I pat1="python" pat2="Python" string="abcPythonabcpythonabc" result1=re.search(pat1,string) print(result1) result2=re.search(pat2,string,re.I) print(result2)
输出如下:
<re.Match object; span=(12, 18), match='python'> <re.Match object; span=(3, 9), match='Python'>
贪婪模式和懒惰模式
贪婪模式是尽可能多的去匹配,懒惰模式是尽可能少的去匹配。
讯享网import re pat1="p.*y" pat2="p.*?y" string="abc_python_abc_python" result1=re.search(pat1,string) print(result1) result2=re.search(pat2,string) print(result2)
输出如下:
<re.Match object; span=(4, 17), match='python_abc_py'> <re.Match object; span=(4, 6), match='py'>
以上,记录本人学习python过程。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/68814.html