Python Lib -- 正则表达式

Python Raw String

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

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

语法

Python Lib -- 正则表达式_第1张图片
regexSyntax.PNG
# 类似于 Django 中的 URL Pattern
In [53]: text = '

hello

' In [60]: re.search(r'

(?P.*)

',text).group('heading') Out[60]: 'hello'
Python Lib -- 正则表达式_第2张图片
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\w+)://(?P.+)', url, re.DOTALL).group()
Out[66]: 'https://www.google.com'

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

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

正则表达式快速参考

Regular Expression Language

Python Lib -- 正则表达式_第3张图片
Regular expressions quick reference_01.jpg
Python Lib -- 正则表达式_第4张图片
Regular expressions quick reference_02.jpg

你可能感兴趣的:(Python Lib -- 正则表达式)