[关闭]
@chenwei123 2018-02-07T09:50:41.000000Z 字数 1166 阅读 456

正则表达式

Python


正则表达式

1.介绍符号表达的含义

符号 代表含义
\d 一个数字
\w 一个字母或数字
. 任意字符
'py.' 可以匹配'pyc', 'pyo', 'py!'
* 任意个字符(含0)
+ 至少一个字符
? 0/1个字符
{n} n个字符
{n,m} n-m个字符
\s 一个空格(tab等空白符)
[0-9a-zA-Z_] 可以匹配一个数字、字母或者下划线
[0-9a-zA-Z_]+ 可以匹配至少由一个数字、字母或者下划线组成的字符串
  • [0-9a-zA-Z\_] 可以匹配一个数字、字母或者下划线
  • [0-9a-zA-Z\_]+ 可以匹配至少由一个数字、字母或者下划线组成的字符串
  • A|B 可以匹配A或B
  • (P|p)ython 可以匹配'Python'或者'python'
  • ^ 表示行的开头
  • $ 表示行的结尾

2. re 模块

1.字符串匹配
  1. import re
  2. re.match(r"^\d{3}\-\d{3,8}$", "010-12345") #match()方法判断是否匹配,如果匹配成功,返回一个Match对象,否则返回None
  3. #<_sre.SRE_Match object; span=(0, 9), match='010-12345'>
  4. re.match(r'^\d{3}\-\d{3,8}$', '010 12345')
  5. #>>>
2.切分字符串
  1. re.split(r"\s+", "a b c") #['a', 'b', 'c']
  2. re.split(r"[\s\,]+", "a,b, c d") #['a', 'b', 'c', 'd']
  3. re.split(r"[\s\,\;]+", "a,b;; c d") #['a', 'b', 'c', 'd']
3.分组
用()表示的就是要提取的分组 Group
  1. import re
  2. m = re.match(r"^(\d{3})-(\d{3,8})$", "010-12345")
  3. #<_sre.SRE_Match object; span=(0, 9), match='010-12345'>
  4. m.group(0) #'010-12345', 原始字符串
  5. m.group(1) #'010'
  6. m.group(2) #'12345'
  7. m.groups() #('010', '12345')

如果正则表达式中定义了组,就可以在Match对象上用group()方法提取出子串来。

4.编译
  1. import re
  2. #编译
  3. re_telephone = re.compile(r"^(\d{3})-(\d{3,8})$")
  4. #使用
  5. re_telephone.match("010-12345").groups() #('010', '12345')
  6. re_telephone.match("010-8086").groups() #('010', '8086')

如果一个正则表达式要重复使用几千次,出于效率的考虑,我们可以预编译该正则表达式,接下来重复使用时就不需要编译这个步骤了,直接匹配

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注