码迷,mamicode.com
首页 > 编程语言 > 详细

python 正则表达式

时间:2018-11-19 12:43:07      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:app   result   忽略   一个   import   play   ble   3.3   for   

 

一、 正则表达式

 

 

元字符

\d

digit,数字(等效:[0-9])

\d+

匹配连续的数字

\D

非数字

\D{3}

匹配连续的非数字

\w

word,单词([A-Z0-9a-z_])

\w{6}

6个单词字符

\W

非单词(单词是指标识符)

\W{3}

3个非单词字符

\s

space,空白字符([\t\r\n])

\s{2}

2个空白字符

\S

非空白字符

\S{3}

3个非空白字符

通配

.

除开换行的任意字符

.{3}

3个任意字符(换行除外)

 

量词

?

有一个或没有(0、1)

\d?

最多匹配一个数字

*

任意个数(0、1、2、3….)

\d*

匹配任意个数的数字

+

至少一个(1、2、3、4…)

[a-z]+

匹配一个以上的字母

 

数量

{m}

m个(x==m个)

\d{3}

精确匹配3个数字

{m,n}

m到n个(m<=x<=n个)

\d{3,5}

匹配3到5个数字

{m,}

至少m个(x>=m个)

\d{3,}

匹配3个到以上的数字

集合中任意一个

[set]

set可以是单个字符,也可以是范围

[\da-f]

十六进制中单个字符

不在集合中任意一个

[^set]

通上,set前有一个^,表示在所有字符中取set集合的补集

[^3-6]

3到6之外的字符

简单分组

()

括号用于将规则包起来,成为一组,不可拆分的规则不用括号包起来

(\.\d+)

.和紧接着的数字

边界

\b

能组成标识符的字符和不能组成标识符的字符之间

\b\d+

匹配非\w字符紧接着多个数字

|

多组规则,任意一组满足

\d{3}|[a-z]{5}

匹配3个数字或5个字母

 

注意:匹配N个,只连续出现N次。

二、 Python中使用正则表达式
常用方法:
方法 返回值类型 作用
  re.match(pattern, string, flags=0)   正则匹配对象、None   从头匹配
  re.search(pattern, string, flags=0)   正则匹配对象、None   匹配
  re.compile(pattern, flags=0)   正则模式对象、None   编译正则
  re.findall(pattern, string, flags=0)   列表   查找所有匹配
  re.sub(pattern, repl, string, count=0, flags=0)   字符串   字符串替换
  re.split(pattern, string, maxsplit=0, flags=0)   列表   字符串分割
  re.finditer(pattern, string, flags=0)   可迭代对象   获取多次匹配
匹配模式(标志):
  re.I:Ignore Case,全称 re.IGNORECASE,忽略字母大小写。
补充:
正则匹配对象的方法中,groups()方法,可以得到匹配到的所有组,是元组类型。
  re.search()方法,只有匹配到一个以后,就不再继续查找了。
  re.compile()编译得到的结果是一个正则模式对象,可以调用查找、匹配等方法,但是不需要再传递模式(pattern)参数。
  re.findall()返回的数据与模式有关,如果模式中没有组,会返回所有找到的完整匹配,如果模式中有组,只会返回匹配到的组内容。无论是否匹配到了数据,都会返回一个列表。
  re.findall()返回值演示

import re

found1 = re.findall(r\d{2}\D, addafd3434daf3434adf)
print(found1)
# [‘34d‘, ‘34a‘]

found2 = re.findall(r(\d{2})\D, addafd3434daf3434adf)
print(found2)
# [‘34‘, ‘34‘]

found3 = re.findall(r((\d){2})\D, addafd3434daf3434adf)
print(found3)
# [(‘34‘, ‘4‘), (‘34‘, ‘4‘)]

 

  re.finditer()返回一个可迭代对象,可迭代对象每一次迭代返回的的是一个正则匹配对象。不管能不能匹配到数据,都会返回一个可迭代对象。
  re.finditer()使用示例:
# 示例一

import re

pattern = r((\d+)\.(\d{2}))\D
data = piis3.1415,rmb have 2.50,one apple need 3.25 yuan
it = re.finditer(pattern, data)
for i in re.finditer(pattern, data):
    print(i, i.groups())

# 示例二

import re

pattern = r(\d{2})\.(\1)\2
data = 12.34dsafafad22.22,ad23.2323fd33.33,44.45
for i in re.finditer(pattern, data):
    print(i, \t, i.groups())

 

其他示例代码:

re.sub(r灌水|水军|扯淡, ***, 一大批水军在这里扯淡、整天灌水。)
re.sub(r(\d+)[a-z]+, r(\1), he234He, Hh66aabbcc)

import re

data = pi is 3.1415, I have a DREAM, Learning Python
repl = -*-
split_result = repl.join(re.split(r[a-z]+, data))
sub_result = re.sub(r[a-z]+, repl, data)
print(split_result)
print(sub_result)
print(split_result == sub_result)

 

 

python 正则表达式

标签:app   result   忽略   一个   import   play   ble   3.3   for   

原文地址:https://www.cnblogs.com/sxqfuture/p/9982136.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!