Python Lib -- 正则表达式

Python Raw String

在python字符串中 \ 是转义序列符号,所以在编写正则表达式时,建议使用 raw string,自动将 \ 当作普通字符:

# raw string
r'\n'
# 等价于字符串
'\\n'

语法

regexSyntax.PNG
# 类似于 Django 中的 URL Pattern
In [53]: text = '<h1>hello</h1>'
In [60]: re.search(r'<h1>(?P<heading>.*)</h1>',text).group('heading')
Out[60]: 'hello'
regexCharSet.PNG

贪心和非贪心匹配

  • 贪心匹配:尽可能匹配更多的字符
  • 非贪心匹配:尽可能匹配更少的字符

贪心和非贪心匹配一般区别于匹配含嵌套的对象中。python的正则表达式默认为贪心匹配,使用非贪心匹配时,仅需在表示数量的语法后加上 ? 即可,比如: *? , +? , {m,n}?

In [23]: text = '!Hello!World!'
# 贪心匹配
In [24]: re.search(r'!.*!', text).group()
Out[24]: '!Hello!World!'
# 非贪心匹配
In [25]: re.search(r'!.*?!', text).group()
Out[25]: '!Hello!'

模块 re

In [41]: import re
In [44]: re.search(r'\w+', 'Hello').group()  
Out[44]: 'Hello'

如果要多次使用正则表达式,可以进行编译

In [45]: pattern = re.compile(r'\w+')

In [46]: re.search(pattern, 'hello').group()
Out[46]: 'hello'

常用的变量

  • re.IGNORECASE :忽略大小写
  • re.DOTALL :使 . 包含换行符 \n
In [48]: re.search('hello', 'Hello', re.IGNORECASE).group()
Out[48]: 'Hello'

常用的方法

  • re.search(pattern, string, flags=0)
  • re.match(pattern, string, flags=0) :正则表达式要匹配字符串的首部
  • re.fullmatch(pattern, string, flags=0) : 字符串要完整匹配正则表达式
  • re.split(pattern, string, maxsplit=0, flags=0)
  • re.findall(pattern, string, flags=0) :返回匹配项目的列表
  • re.finditer(pattern, string, flags=0)
  • re.sub(pattern, repl, string, count=0, flags=0) :substitute 替换
In [50]: re.search(r'world', 'hello world')
Out[50]: <_sre.SRE_Match object; span=(6, 11), match='world'>

In [51]: re.match(r'world', 'hello world')
# 无匹配结果
In [52]:

归组

In [62]: re.search(r'(\w+)://(.+)', url, re.DOTALL).group()
Out[62]: 'https://www.google.com'

In [63]: re.search(r'(\w+)://(.+)', url, re.DOTALL).group(1)
Out[63]: 'https'

In [64]: re.search(r'(\w+)://(.+)', url, re.DOTALL).group(2)
Out[64]: 'www.google.com'

# 参数 0 和不传递参数的结果一样
In [65]: re.search(r'(\w+)://(.+)', url, re.DOTALL).group(0)
Out[65]: 'https://www.google.com'

给定变量名

In [66]: re.search(r'(?P<protocol>\w+)://(?P<url>.+)', url, re.DOTALL).group()
Out[66]: 'https://www.google.com'

In [67]: re.search(r'(?P<protocol>\w+)://(?P<url>.+)', url, re.DOTALL).group('protocol')
Out[67]: 'https'

In [68]: re.search(r'(?P<protocol>\w+)://(?P<url>.+)', url,re.DOTALL).group('url')
Out[68]: 'www.google.com'

正则表达式快速参考

Regular Expression Language

Regular expressions quick reference_01.jpg
Regular expressions quick reference_02.jpg
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容