Python_day8:正则表达式

时间:2022-03-04 18:47:44

 

Python

PHP

正则表达式

\d :匹配一个数字字符,还可以使用[0-9]

\D :匹配一个非数字字符,还可以使用[^0-9]

\w :匹配包括下划线的任何单词字符,还可以使用[0-9a-zA-Z_]

\W :匹配任何非单词字符,还可以使用[^\w]

\s :匹配任何空白字符,space缩写

\S :匹配任何非空白字符,还可以使用[^\s]

. :匹配除 "\n" 之外的任何单个字符

[\u4e00-\u9fa5] :匹配中文字符中的任一字符

 

 

* :匹配前面的子表达式零次或多次,0到多,{0,}

+ :匹配前面的子表达式一次或多次,1到多,{1,}

? :匹配前面的子表达式零次或一次,0或1,{0,1}

 

{n} :匹配确定的 n

{n,} :至少匹配n

{n,m} :最少匹配 n 次且最多匹配 m

 

 

^ :匹配输入字符串的开始位置

$ :匹配输入字符串的结束位置

 

 

[a-z] :匹配字符a到字符z之间的任一字符

[A-Z] :匹配字符A到字符Z之间的任一字符

[0-9] :匹配数字0到9之间的任一数字

[0-9a-z] :匹配数字0到9或字符a到字符z之间的任一字符

[0-9a-zA-Z] :匹配数字0到9或字符a到字符z或字符A到字符Z之间的任一字符

 

[^a-z] :匹配除字符a到字符z以外的任一字符

[^0-9] :匹配除数字0到9以外的任一字符

 

 

选择匹配符|,匹配左边或右边

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Python

PHP

模块

import re

 

 

定义正则模式时,如果想要避免因为转译\引起正则错误,可以使用转译区r''

 

正则匹配

import re
s = '010-12345'
  print(re.match(r'^\d{3}-\d{5}$',s))

如果匹配成功返回一个对象,匹配失败返回None

 

字符串切分

l = 'a b   c'
  print(re.split(r'\s+',l))
l = 'a,b, c ;, d'
  print(re.split(r'[\s|,|;]+',l))

 

 

提取子串

.group(n)

s = '010-12345'
  m = re.match(r'^(\d{3})-(\d{5})$',s)
  print(m.group(0))
  print(m.group(1))

 

group(0)为匹配到的子串

group(1)表示子表达式匹配到的子串

group(2)…

 

 

正则匹配默认为贪婪匹配,会匹配尽量多长度

在后面加个?可以更换为非贪婪模式

 

获取所有匹配到的信息

s = '010-12345,011-12346'
  m = re.findall(r'(\d{3}-\d{5})',s)
  print(m)

 

 

正则表达式预编译

s = '010-12345,011-12346'
  pre = re.compile(r'(\d{3}-\d{5})')
  print(pre.findall(s))

预编译可以在需要大量重复匹配的时候提高一点效率

 

正则替换

text = "JGood is a handsome boy"
  print(re.sub(r'(\sis\sa\s)', r'-\1-', text))

反向引用的时候注意使用转译区,否则因为\转译的关系会出现错误

 

re.subn()会返回替换后的字符串以及总共的替换次数