正则表达式, Python Re模块

一,正则表达式

1.常用正则表达式符号

符号 描述 正则表达式模式 匹配结果
 a|b 匹配正则表达式 a或者 b a|b a,b
   . 匹配任意字符(除\n以外) .abc 1abc,aabc,6abc
  ^ 从字符串开始匹配 ^String String
  $  从字符串结尾匹配 End$ End
  * 匹配 0 次或者多次前面出现的正则表达式 123* 1233,12,123333
  + 匹配 1 次或者多次前面出现的正则表达式 123* 123,1233,123333
  ? 匹配 0次或者1次前面出现的正则表达式 123? 12,123
{n} 匹配n次前面出现的正则表达式 123{2} 1233
{n,m} 匹配 n~m次前面出现的正则表达式 123{2,4} 1233,12333,123333
[...] 匹配字符集的任意单一字符 12[abced] 12a,12b,12c
[x-y] 匹配 xy 范围中的任意单一字符 12[a-z] 12a,12f
[^…] 匹配不在字符集的任意单一字符 12[^abcde] 12f,12z
 (*+)?  非贪婪匹配,在满足匹配条件的基础上尽可能少的匹配  123*?4 124
\d 匹配十进制数字,相当于[0-9](\D正好相反)  \dabc  1abc,0abc
\w 匹配任何字母数字字符,与[A-Za-z0-9_]相同( \W 与之相反) \waaa 1aaa,baaa,Aaaa
\s 匹配任何空格字符,与[\n\t\r\v\f]相同( \S 与之相反) \s \n,\t
\b  匹配任何单词边界( \B 与之相反) \bis is,isstr
\A(\Z) 匹配字符串的起始(结束) \ADear Dear

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

二,Python re 模块

方法/函数 描述
compile(patternflags = 0) 使用任何可选的标记来编译正则表达式的模式,然后返回一个正则表达式对象
match(patternstringflags=0) 使用带有可选的标记的正则表达式的模式来从String开始位置匹配字符串。如果匹配成功,就返回
匹配对象; 如果失败,就返回 None
 search(patternstringflags=0) 使用可选标记搜索字符串中第一次出现的正则表达式模式。 如果匹配成功,则返回匹配对象; 如果失败,则返回 None
 findall(patternstring [,flags] )  查找字符串中所有(非重复)出现的正则表达式模式,并返回一个匹配列表
 split(patternstringmax=0)  根据正则表达式的模式分隔符, split 函数将字符串分割为列表,然后返回成功匹配的
列表,分隔最多操作 max 次(认分割所有匹配成功的位置)
 sub(patternreplstringcount=0)  使用 repl 替换所有正则表达式的模式在字符串中出现的位置,除非定义 count, 否则就
将替换所有出现的位置
 group(num=0)  返回整个匹配对象,或者编号为 num 的特定子组
 groups(default=None)  返回一个包含所有匹配子组的元组(如果没有成功匹配,则返回一个元组
 groupdict(default=None)  返回一个包含所有匹配的命名子组的字典,所有的子组名称作为字典的键

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

常用的模块属性

re.I、 re.IGnorECASE 不区分大小写的匹配
re.L、 re.LOCALE 根据所使用的本地语言环境通过\w、 \W、 \b、 \B、 \s、 \S 实现匹配
re.M、 re.MULTILINE ^和$分别匹配目标字符串中行的起始和结尾,而不是严格匹配整个字符串本身的起始和结尾
re.S、 rer.DOTALL “.” (点号)通常匹配除了\n(换行符)之外的所有单个字符;该标记表示“.” (点号)能够匹配全部字符
re.X、 re.VERBOSE 通过反斜线转义, 否则所有空格加上#(以及在该行中所有后续文字)都被忽略,除非在一个字符类中或者允许注释并且提高可读性

 

 

 

 

 

 

 

 

 

 

 

三,实例

1.match()方法, 从字符串开始匹配,匹配成功返回匹配对象,否则返回None

>>> m = re.match(‘foo‘,‘foo‘)           # 模式匹配字符串
>>> if m is not None:                      # 如果匹配成功,就输出匹配内容
... m.group()
 输出:foo

>>> m = re.match(‘foo‘,‘bar‘)          # 模式并不能匹配字符串
>>> if m is not None: m.group()      #  如果省去if,报AttributeError 异常

 

2.search()在一个字符串中查找模式

>>>  m = re.search(‘foo‘,‘seafood‘)

>>>   if m is not None :

           m.group()

3. 匹配多个字符串

>>> bt = ‘bat|bet|bit‘              # 正则表达式模式: bat、 bet、 bit
>>> m = re.match(bt,‘bat‘)   # ‘bat‘ 是一个匹配

 

4. 匹配任何单个字符

>>> anyend = ‘.end‘
>>> m = re.match(anyend,‘bend‘)     # 点号匹配 ‘b‘

 

5. 重复、特殊字符以及分组

>>> m = re.match(‘\w\w\w-\d\d\d‘,‘abc-123‘)#匹配成功

>>> m = re.match(‘\w\w\w-\d\d\d‘,‘abc-xyz‘)  #匹配失败

 

>>> m = re.match(‘(\w\w\w)-(\d\d\d)‘,‘abc-123‘)
>>> m.group() # 完整匹配
‘abc-123‘
>>> m.group(1) # 子组 1
‘abc‘
>>> m.group(2) # 子组 2
‘123‘
>>> m.groups() # 全部子组
(‘abc‘,‘123‘)

 

>>> m = re.match(‘(a(b))‘,‘ab‘) # 两个子组
>>> m.group() # 完整匹配
‘ab‘
>>> m.group(1) # 子组 1
‘ab‘
>>> m.group(2) # 子组 2
‘b‘
>>> m.groups() # 所有子组
(‘ab‘,‘b‘)

 

6.匹配字符串的起始

m = re.search(‘^The‘,‘The end.‘) # 匹配

 

7.findall()方法

>>> re.findall(‘car‘,‘carry the barcardi to the car‘)
[‘car‘,‘car‘,‘car‘]

 

8.使用 sub()和 subn()搜索与替换

>>> re.sub(‘[ae]‘,‘X‘,‘abcdef‘)
‘XbcdXf‘
>>> re.subn(‘[ae]‘,‘abcdef‘)
(‘XbcdXf‘,2)

 

9.split()分隔字符串

>>> re.split(‘:‘,‘str1:str2:str3‘)[‘str1‘,‘str2‘,‘str3‘]

相关文章

正则替换html代码中img标签的src值在开发富文本信息在移动端...
正则表达式
AWK是一种处理文本文件的语言,是一个强大的文件分析工具。它...
正则表达式是特殊的字符序列,利用事先定义好的特定字符以及...
Python界一名小学生,热心分享编程学习。
收集整理每周优质开发者内容,包括、、等方面。每周五定期发...