(1) python 正则表达式

注意:本文只介绍常用的正则和 re 模块的用法,更多的内容请自行百度

 

group 和 groups

取出通过 match() 和 search() 匹配到的字符

group 示例:

import re                                       # 加载模块
m = re.match('(foo)111(abc)','foo111abc')       # 使用 match() 匹配字符串

if m is not None:                               # 如果没有匹配到东西 m 就等于 None,此处做判断防止异常
    print(m.group())                            # 返回整个字符串
    print(m.group(1))                           # 返回第一个括号中匹配到的内容
    print(m.group(2))                           # 返回第二个括号中匹配到的内容

>>foo111abc
>>foo
>>abc

groups 示例:

import re                                          # 加载模块
m = re.match('(foo)111(abc)','foo111abc')          # 使用 match() 匹配字符串

if m is not None:                                  # 如果没有匹配到东西 m 就等于 None,此处做判断防止异常
    print(m.groups())                              # 返回一个包含所有括号中匹配到内容的元组
    print(m.groups()[0])                           # 使用下标第一个括号中匹配到的内容
    print(m.groups()[1])                           # 使用下标第二个括号中匹配到的内容

 match()

从字符串起始位置开始匹配

match 示例:

import re
m = re.match('(foo)112','foo111abc')               # 从开头开始匹配
v = re.match('111(abc)','foo111abc')               # 从中间开始匹配

if m is not None:                                  # 从开头开始匹配可以匹配到
    print("m:")
    print(m.groups())                              # 返回一个包含所有括号中匹配到内容的元组
if v is not None:                                  # 此处没有匹配到东西所以下面的语句不会执行
    print("v:")
    print(v.groups())                              # 返回一个包含所有括号中匹配到内容的元组

>>m:
>>('foo',)

search()

不关心是否是字符串起始位置

search 示例:

import re
m = re.match('111(abc)','foo111abc')             # 从开头开始匹配
v = re.search('111(abc)','foo111abc')            # 从中间开始匹配

if m is not None:                                # 从开头开始匹配可以匹配到
    print("m:")
    print(m.groups())                            # 返回一个包含所有括号中匹配到内容的元组
if v is not None:                                # 此处没有匹配到东西所以下面的语句不会执行
    print("v:")
    print(v.groups())                            # 返回一个包含所有括号中匹配到内容的元组

>>v:
>>('abc',)

findall()

匹配所以符合正则表达式的字符串

findall 示例:

import re
print(re.findall('cat','catcat,cater acater'))
print(re.findall('\w\d\w','d213 d3a ff2d fff3ddd'))

>>['cat', 'cat', 'cat', 'cat']
>>['d21', 'd3a', 'f2d', 'f3d']

 finditer()

基本用法和 findall 一致,但返回的对象是一个迭代器

finditer 示例:

import re

a = re.finditer('\wbc','abc abcd aabcd')
print(type(a))
for i in a:
    print(i.group())

>> abc
>> abc
>> abc

sub() 和 subn()

将搜索到的内容替换,sub 和 subn 用法基本一致, subn 会额外返回一个替换个数

示例:

import re
a = 'asd 123 asd 143'
print(re.sub('\d+','111111',a))
print(re.subn('\d+','111111',a))

  >> asd 111111 asd 111111
  >> ('asd 111111 asd 111111', 2)

使用分组替换示例:

import re
a = '1998/06/24'
print(re.sub(r'(\d+)/(\d+)/(\d+)',r'\3/\2/\1',a))

>> 24/06/1998

split() 分割字符串

基本用法和 str.split() 一致,但是可以用正则作为分隔符

split 示例:

import re
a = 'asd,123,dsa,'
b = 'asd,123=dsa,=fds'

print(re.split('\,',a))
print(re.split('[,=]+',b))

  >> ['asd', '123', 'dsa', '']
  >> ['asd', '123', 'dsa', 'fds']

 

posted @ 2017-08-03 11:03  bzjxs  阅读(120)  评论(0)    收藏  举报