python - re正则匹配模块

re模块

re 模块使 Python 语言拥有全部的正则表达式功能。

compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象。该对象拥有一系列方法用于正则表达式匹配和替换。

re 模块也提供了与这些方法功能完全一致的函数,这些函数使用一个模式字符串做为它们的第一个参数。

re.match函数

re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。

# (匹配规则,字符串,特殊标志)
re.match(pattern, string, flags=0)

re.search方法

re.search 扫描整个字符串并返回第一个成功的匹配。

re.search(pattern, string, flags=0)

re.match与re.search的区别

re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。

#!/usr/bin/python
import re

line = "Cats are smarter than dogs";

matchObj = re.match( r‘dogs‘, line, re.M|re.I)
if matchObj:
   print "match --> matchObj.group() : ", matchObj.group()
else:
   print "No match!!"

matchObj = re.search( r‘dogs‘, line, re.M|re.I)
if matchObj:
   print "search --> matchObj.group() : ", matchObj.group()
else:
   print "No match!!"
No match!!
search --> matchObj.group() :  dogs

检索和替换

Python 的 re 模块提供了re.sub用于替换字符串中的匹配项。

# pattern 正则中的模式字符串。
# repl 替换的字符串,也可为一个函数。
# string 要被查找替换的原始字符串。
# count 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。
re.sub(pattern, repl, string, count=0, flags=0)
#### 实例
#!/usr/bin/python
# -*- coding: UTF-8 -*-

import re

phone = "2004-959-559 # 这是一个国外电话号码"

# 删除字符串中的 Python注释
num = re.sub(r‘#.*$‘, "", phone)
print "电话号码是: ", num

# 删除非数字(-)的字符串
num = re.sub(r‘\D‘, "", phone)
print "电话号码是 : ", num
电话号码是:  2004-959-559
电话号码是 :  2004959559

re.compile 函数

compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。

#### parttern re.compile(pattern[, flags])
#### flags
# re.I 忽略大小写
# re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境
# re.M 多行模式
# re.S 即为 . 并且包括换行符在内的任意字符(. 不包括换行符)
# re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库
# re.X 为了增加可读性,忽略空格和 # 后面的注释
re.compile(pattern[, flags])
>>>import re
>>> pattern = re.compile(r‘([a-z]+) ([a-z]+)‘, re.I)   # re.I 表示忽略大小写
>>> m = pattern.match(‘Hello World Wide Web‘)
>>> print m                               # 匹配成功,返回一个 Match 对象
<_sre.SRE_Match object at 0x10bea83e8>
>>> m.group(0)                            # 返回匹配成功的整个子串
‘Hello World‘
>>> m.span(0)                             # 返回匹配成功的整个子串的索引
(0, 11)
>>> m.group(1)                            # 返回第一个分组匹配成功的子串
‘Hello‘
>>> m.span(1)                             # 返回第一个分组匹配成功的子串的索引
(0, 5)
>>> m.group(2)                            # 返回第二个分组匹配成功的子串
‘World‘
>>> m.span(2)                             # 返回第二个分组匹配成功的子串
(6, 11)
>>> m.groups()                            # 等价于 (m.group(1), m.group(2), ...)
(‘Hello‘, ‘World‘)
>>> m.group(3)                            # 不存在第三个分组
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: no such group

原文地址:https://www.cnblogs.com/blitheG/p/8575760.html

时间: 2024-07-29 09:11:15

python - re正则匹配模块的相关文章

Python中正则匹配使用findall时的注意事项

在使用正则搜索内容时遇到一个小坑,百度搜了一下,遇到这个坑的还不少,特此记录一下. 比如说有一个字符串  "[email protected]@[email protected]@asdfcom" 想匹配出里面所有的邮箱地址,该怎么实现呢? 写了个正则,测试一下: >>> import re >>> s = "[email protected]@[email protected]@asdfcom" >>> pat

Python中正则匹配使用findall,捕获分组(xxx)和非捕获分组(?:xxx)的差异

转自:https://blog.csdn.net/qq_42739440/article/details/81117919 下面是我在用findall匹配字符串时遇到的一个坑,分享出来供大家跳坑. 例题: 如图所示: 正则a和正则b两个式子匹配出来的结果是不同的. 那 ?: 的作用就是把捕获分组转变为非捕获分组. 什么是捕获组和非捕获组呢? (qq|163|126) ---> 这样单独的括号就为捕获组 (?:qq|163|126) ---> 这样在原有分组里加上?: 就把捕获组转变为一个非捕获

python中RE正则匹配模块的用法若干

# -*- coding:utf-8 -*-import import reload()('utf-8')= [() for in ['this''that']]   # 编译一个匹配模板对象列表,该列表匹配模板编译源来自一个二元列表= 'Does this text match the pattern?'print 'Test:'' 'for in :                   # 查找每一个模板对象    print 'seeking "%s"-->' % if (

python之正则re模块

1.正则的语法:  中文教程:https://wizardforcel.gitbooks.io/py-re-guide/content/index.html 1.re的数量词: 1. ^   匹配度字符串开始位置 2. $   匹配字符串结束的地方: tr = 'jgko22rkdljgkd' r2 = re.findall('^jgkd', tr) print(r2) # []是空的 r4 = re.findall('^jgko', tr) print(r4) # ['jgko'] r3 =

Python之正则re模块 --- findall()详解

1. findall() 函数的2种表示形式 1 import re 2 kk = re.compile(r'\d+') 3 kk.findall('one1two2three3four4') 4 #[1,2,3,4] 5 6 #注意此处findall()的用法,可传两个参数; 7 kk = re.compile(r'\d+') 8 re.findall(kk,"one123") 9 #[1,2,3] 2. 正则表达式可能遇到的坑  --- 正则表达式中的括号() 1. 当正则表达式中

re正则匹配模块_python

一.re模块 1.模块功能 通过re模块的接口接入正则表达式语言,主要用于匹配字符串. 2.正则表达式元字符以及意义 . 代表任意一个字符(除了换行符\n) ^ 以什么开头 $ 以什么结尾 * 重复匹配*前面的字符出现0到多次 [0,正无穷] + 重复匹配+前面的字符1到多次[1,正无穷] ? 重复匹配?前面的字符0或1次[0,1] {数字} 代表前面的匹配次数,如'b{3}' [] 代表字符集中的字符,或的关系,如'[a-z]',还有取消元字符意义的特殊功能, 如'[^123]',^放在[]里

python中正则匹配字符\b配置单词边界不生效的解决办法

#-*-coding:utf-8-*-import rename="duoceshi"p= re.compile('\bduoceshi\b')f = p.search(name)if f:    print f.group()########################################3p= re.compile(R'\bduoceshi\b')  #这里要加上原始字符r/R,原因是:python默认会把\b解码给ascii码8(退格符)f = p.search(

day6 反射,hashlib模块,正则匹配,冒泡,选择,插入排序

一.反射(自省) 首先通过一个例子来看一下本文中可能用到的对象和相关概念. import sys # 模块,sys指向这个模块对象import inspectdef foo(): pass # 函数,foo指向这个函数对象 class Cat(object): # 类,Cat指向这个类对象 def __init__(self, name='kitty'): self.name = name def sayHi(self): # 实例方法,sayHi指向这个方法对象,使用类或实例.sayHi访问

Python正则匹配字母大小写不敏感在读xml中的应用

需要解决的问题:要匹配字符串,字符串中字母的大小写不确定,如何匹配? 问题出现之前是使用字符串比较的方式,比如要匹配'abc',则用语句: 1 if s == 'abc':#s为需要匹配的字符串 2 print '匹配成功\n' 现在的问题是s可能是Abc.ABC等等,所以需要大小写不敏感的匹配,如果把需要匹配的模式的大小写进行罗列,那即使是三个字母的短模式也是很麻烦,查了一下,正则表达式re模块中有个参数flags=re.I,这样就可以大小写不敏感的匹配了,示例如下: 1 import re