python正则表达式及使用正则表达式的例子

正则表达式

正则表达用来匹配字符串

正则表达式匹配过程

  1. 依次拿出表达式和文本中的字符串进行比价
  2. 如果每个字符都能匹配,则匹配成功;一旦有匹配不成功的字符,则匹配失败
  3. 如果有量词和边界,则匹配过程稍微有些不同

正则表达式语法规则

语法

说明

表达式实例

匹配字符串

字符

. 匹配除换行"\n"外的任意字符串 abc abc
\ 转义字符,使后一个字符改变原来的意思 a\\c a\c
[...] 字符集,对应的位置可以是字符集中任意字符,字符集中的字符可以逐个列出,也可以给出范围,如[abc]或[a-c]。第一个字符如果是^则表示取反,如[^abc]表示不是abc中的其他字符。所有的特殊的字符在字符集中都失去其原有的特殊含义。在字符集中使用^、]或-,可以使用转义字符匹配它们 a[bcd]e
abe

ace

ade

预定义字符集

\d 数字:[0-9] a\dc a1c
\D 非数字:[^0-9] a\Dc abc
\s 空白字符:[<空格>\t\r\n\f\v] a\sc a c
\S 非空白字符:[^\s] a\Sc abc
\w 单词字符:[a-zA-z0-9_] a\wc abc
\W 非单词字符:[^\w] a\Wc a c

数量词

* 匹配一个字符串0或无限次 abc*
ab

abc

abccc

+ 匹配一个字符串1次或无限次 abc+
abc

abccc

? 匹配一个字符串0次或1次
abc?


ab

abc

{m} 匹配一个字符串m次 abc{2} abcc
{m,n} 匹配一个字符串m到n次 abc{2,3}
abcc

abccc

边界匹配

^ 匹配字符串开头 ^abc abc
$ 匹配字符串末尾 abc$ abc
\A 匹配字符串开始 \Aabc abc
\Z 匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串 abc\Z abc
\b 匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。
\B 匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。

逻辑分组

| 匹配|表达式左右的任意一个 abc|def
abc

def

(...) 作为分组,每遇到一个(,分组编号加1,使用分组的好处是匹配的子串会保存到一个子组,便于以后使用 (abc){2} abcabc
(?P<name>...) 分组除原有编号外,再加一个别名 (?P<id>abc){2} abcabc
\<number> 引用编号为number的分组匹配到的字符串 (\d)ab\1
1ab1

5ab5

(?P=name) 应用别名为name的分组匹配到的字符串 (?P<id>abc)ee(?P=name) abceeabc

特殊构造(不分组)

(?:...) (...)的不分组版本,用于|或后接数量词 (?:abc){2} abcabc
(?iLmsux) iLmsux中的每个字符代表正则表达式的一种匹配模式,只能用在正则表达式开头,可选多个 (?i)abc AbC
(?#...) 将#后面的字符当做注释忽略 abc(?#comment)def abcdef
(?=...) 之后的字符串表达式需要匹配才能成功,不消耗字符串内容 a(?=\d) 后面是数字的a
(?!...) 之后的字符串表达式需要不匹配才能成功,不消耗字符串内容 a(?!\d) 后面不是数字的a
(?<=...) 之前的字符串表达式需要匹配才能成功,不消耗字符串内容 (?<=\d)a
前面是数字的a

(?<!...) 之前的字符串表达式需要不匹配才能成功,不消耗字符串内容 (?<!\d)a 前面不是数字的a

(?(id/name)yes_

pattern|no_parttern)


如果匹配到分组为id或别名name的字符串成功匹配,则需要匹配yes_pattern

不成功,怎需要匹配no_pattern

(\d)abc(?(1)\d|def)
1abc3

abcdef

贪婪模式和非贪婪模式

贪婪模式是尽可能多的匹配字符串,python默认为贪婪模式,非贪婪模式尽可能少的匹配字符串,在正则表达式后面加个?表示非贪婪模式。例如:字符串abcccb,贪婪模式正则表达式为ab.*c,非贪婪模式的正则表达式为ab.*?c,贪婪模式结果为abccc,非贪婪模式结果为abc,再比如字符串abbb,贪婪模式正则表达式为ab?,非贪婪模式正则表达为ab??,贪婪模式结果为ab,非贪婪结果为a。

python的re模块

re模块的方法:

1.compile(pattern[,flag]):对正则表达式pattern进行编译,编译后比直接查找速度快

2.match(patter,string[,flag]):从字符串string的开始就匹配,若匹配成功,则返回匹配对象,否则返回None(None对象没有group()和groups()方法,不判断直接调用这两个方法,则会出现异常)

3.search(pattern,string[,flag]):从字符串中查找,若匹配成功,则返回匹配对象,否则返回None

4.findall(pattern,string[,flag]):在字符串 string 中查找正则表达式模式 pattern 的所有(非重复)出现;返回一个匹配对象的列表

5.finditer(pattern,string[, flags])b 和 findall()相同,但返回的不是列表而是迭代器;对于每个匹配,该迭代器返回一个匹配对象

6.split(pattern,string, max=0) 根据正则表达式 pattern 中的分隔符把字符 string 分割为一个列表,返回成功匹配的列表,最多分割 max 次(默认是分割所有匹配的地方)

7.sub(pattern, repl, string, max=0) 把字符串 string 中所有匹配正则表达式 pattern 的地方替换成字符串 repl,如果 max 的值没有给出, 则对所有匹配的地方进行替换

匹配对象的方法和属性:

  1. string:匹配时所使用的文本
  2. re:匹配时使用的pattern对象
  3. group(num=0) 返回全部匹配对象(或指定编号是 num 的子组)
  4. groups() 返回一个包含全部匹配的子组的元组(如果没有成功匹配,就返回一个空元组)

参数flag:

re.I 使匹配对大小写不敏感
re.L 做本地化识别(locale-aware)匹配
re.M 多行匹配,影响 ^ 和 $
re.S 使 . 匹配包括换行在内的所有字符
re.U 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.
re.X 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。

python使用正则表达式的例子

>>> import re
>>> pattern = re.compile(r'foo')
>>> res1 = re.search(pattern,'foo')
>>> res1.group() # 返回的是匹配对象,需要调用group()方法,显示所有的匹配对象
'foo'
>>> res1.groups()# 因为没有子组(即正则表达式中没有分组),返回空元组
()
>>> res2 = re.findall(pattern,'foobbfoo')
>>> res2 # 直接返回的是一个列表,包含所有匹配的字符
['foo', 'foo']
>>> pattern2 = re.compile(r'(\d+)aa')
>>> res3 = re.search(pattern2,'bb32aa')
>>> res3.group() # 返回所有的匹配的对象
'32aa'
>>> res3.groups() # 对比res1的groups(),正则里有分组,返回匹配到的分组
('32',)
>>> res4 = re.findall(pattern2,'bb32aacc5aacc')
>>> res4 # 对比res2,返回一个列表,但只包含所匹配分组里面的字符,
['32', '5']

总结

以上所述是小编给大家介绍的python正则表达式及使用正则表达式的例子,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

您可能感兴趣的文章:

  • python爬虫 正则表达式使用技巧及爬取个人博客的实例讲解
  • Python使用正则表达式抓取网页图片的方法示例
  • Python正则表达式教程之三:贪婪/非贪婪特性
  • Python正则表达式教程之二:捕获篇
  • Python使用中文正则表达式匹配指定中文字符串的方法示例
  • python使用正则表达式匹配字符串开头并打印示例
  • Python正则表达式实现截取成对括号的方法
  • python利用正则表达式提取字符串
  • python 根据正则表达式提取指定的内容实例详解
(0)

相关推荐

  • Python使用正则表达式抓取网页图片的方法示例

    本文实例讲述了Python使用正则表达式抓取网页图片的方法.分享给大家供大家参考,具体如下: #!/usr/bin/python import re import urllib #获取网页信息 def getHtml(url): page = urllib.urlopen(url) html = page.read() return html def getImg(html): #匹配网页中的图片 reg = r'src="(.*?\.jpg)" alt' imgre = re.com

  • python爬虫 正则表达式使用技巧及爬取个人博客的实例讲解

    这篇博客是自己<数据挖掘与分析>课程讲到正则表达式爬虫的相关内容,主要简单介绍Python正则表达式爬虫,同时讲述常见的正则表达式分析方法,最后通过实例爬取作者的个人博客网站.希望这篇基础文章对您有所帮助,如果文章中存在错误或不足之处,还请海涵.真的太忙了,太长时间没有写博客了,抱歉~ 一.正则表达式 正则表达式(Regular Expression,简称Regex或RE)又称为正规表示法或常规表示法,常常用来检索.替换那些符合某个模式的文本,它首先设定好了一些特殊的字及字符组合,通过组合的&

  • Python使用中文正则表达式匹配指定中文字符串的方法示例

    本文实例讲述了Python使用中文正则表达式匹配指定中文字符串的方法.分享给大家供大家参考,具体如下: 业务场景: 从中文字句中匹配出指定的中文子字符串 .这样的情况我在工作中遇到非常多, 特梳理总结如下. 难点: 处理GBK和utf8之类的字符编码, 同时正则匹配Pattern中包含汉字,要汉字正常发挥作用,必须非常谨慎.推荐最好统一为utf8编码,如果不是这种最优情况,也有酌情处理. 往往一个具有普适性的正则表达式会简化程序和代码的处理,使过程简洁和事半功倍,这往往是高手和菜鸟最显著的差别.

  • Python正则表达式实现截取成对括号的方法

    本文实例讲述了Python正则表达式实现截取成对括号的方法.分享给大家供大家参考,具体如下: strs = '1(2(3(4(5(67)6)7)8)9)0' reg1 = re.compile('([()])∗') #一对括号 reg2 = re.compile('([()]|\([()]∗)*\)') #两对括号 reg3 = re.compile('([()]|\([()]∗|([()]|\([()]∗)*\))*\)') #三层 函数 #匹配成对括号正则表达式 def getReg(sel

  • Python正则表达式教程之三:贪婪/非贪婪特性

    之前已经简单介绍了Python正则表达式的基础与捕获,那么在这一篇文章里,我将总结一下正则表达式的贪婪/非贪婪特性. 贪婪 默认情况下,正则表达式将进行贪婪匹配.所谓"贪婪",其实就是在多种长度的匹配字符串中,选择较长的那一个.例如,如下正则表达式本意是选出人物所说的话,但是却由于"贪婪"特性,出现了匹配不当: >>> sentence = """You said "why?" and I say

  • python 根据正则表达式提取指定的内容实例详解

    python 根据正则表达式提取指定的内容 正则表达式是极其强大的,利用正则表达式来提取想要的内容是很方便的事. 下面演示了在python里,通过正则表达式来提取符合要求的内容. 实例代码: import re # 正则表达式是极其强大的,利用正则表达式来提取想要的内容是很方便的事. # 下面演示了在python里,通过正则表达式来提取符合要求的内容.有几个要注意 # 的地方就是: # [1] 要用()将需要的内容包含起来 # [2] 编号为0的group是整个符合正则表达式的内容,编号为1的是

  • python利用正则表达式提取字符串

    前言 正则表达式的基础知识就不说了,有兴趣的可以点击这里,提取一般分两种情况,一种是提取在文本中提取单个位置的字符串,另一种是提取连续多个位置的字符串.日志分析会遇到这种情况,下面我会分别讲一下对应的方法. 一.单个位置的字符串提取 这种情况我们可以使用(.+?)这个正则表达式来提取. 举例,一个字符串"a123b",如果我们想提取ab之间的值123,可以使用findall配合正则表达式,这样会返回一个包含所以符合情况的list. 代码如下: import re str = "

  • python使用正则表达式匹配字符串开头并打印示例

    本文实例讲述了python使用正则表达式匹配字符串开头并打印的方法.分享给大家供大家参考,具体如下: import re s="name=z1hangshan username=fff url=www.baidu.com password=ddd256" s2="username=fff name=z1hangshan url=www.baidu.com password=ddd256" #p=re.compile(r'((?:\s)name=(\S)+)') p=

  • Python正则表达式教程之二:捕获篇

    前言 在上一篇文中,我们介绍了关于Python正则表达式的基础,那么在这一篇文章里,我们将总结一下正则表达式关于捕获的用法.下面话不多说,来看看详细的介绍吧. 捕获 捕获和分组在正则表达式中有着密切的联系,一般情况下,分组即捕获,都用小括号完成(因此,小括号在正则表达式中也属于特殊字符,表达原含义时需要转义): (-)     正常分组,并捕获 (?:-)   分组,但是不捕获 举个例子,假设我们需要匹配一个座机号码: >>> m = re.search(r'^(\d{3,4}-)?(\

  • python正则表达式及使用正则表达式的例子

    正则表达式 正则表达用来匹配字符串 正则表达式匹配过程 依次拿出表达式和文本中的字符串进行比价 如果每个字符都能匹配,则匹配成功:一旦有匹配不成功的字符,则匹配失败 如果有量词和边界,则匹配过程稍微有些不同 正则表达式语法规则 语法 说明 表达式实例 匹配字符串 字符 . 匹配除换行"\n"外的任意字符串 abc abc \ 转义字符,使后一个字符改变原来的意思 a\\c a\c [...] 字符集,对应的位置可以是字符集中任意字符,字符集中的字符可以逐个列出,也可以给出范围,如[ab

  • python模块之re正则表达式详解

    一.简单介绍 正则表达式是一种小型的.高度专业化的编程语言,并不是python中特有的,是许多编程语言中基础而又重要的一部分.在python中,主要通过re模块来实现. 正则表达式模式被编译成一系列的字节码,然后由用c编写的匹配引擎执行.那么正则表达式通常有哪些使用场景呢? 比如为想要匹配的相应字符串集指定规则: 该字符串集可以是包含e-mail地址.Internet地址.电话号码,或是根据需求自定义的一些字符串集: 当然也可以去判断一个字符串集是否符合我们定义的匹配规则: 找到字符串中匹配该规

  • Python匹配中文的正则表达式

    正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分强大.得益于这一点,在提供了正则表达式的语言里,正则表达式的语法都是一样的,区别只在于不同的编程语言实现支持的语法数量不同:但不用担心,不被支持的语法通常是不常用的部分. Python正则表达式简介 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配. Python 自1.5版本起增加了re 模块,它提供 P

  • Python模块学习 re 正则表达式

    re.match re.match 尝试从字符串的开始匹配一个模式,如:下面的例子匹配第一个单词. 复制代码 代码如下: import re text = "JGood is a handsome boy, he is cool, clever, and so on..." m = re.match(r"(\w+)\s", text) if m: print m.group(0), '\n', m.group(1) else: print 'not match' r

  • python re模块和正则表达式

    一.re模块和正则表达式 先来看一个例子:https://reg.jd.com/reg/person?ReturnUrl=https%3A//www.jd.com/ 这是京东的注册页面,打开页面我们就看到这些要求输入个人信息的提示.假如我们随意的在手机号码这一栏输入一个11111111111,它会提示我们格式有误.这个功能是怎么实现的呢?假如现在你用python写一段代码,类似: phone_number = input('please input your phone number : ')

  • Python语法学习之正则表达式的量词汇总

    目录 正则表达式中的符号 示例 - 1 示例 - 2 示例 - 3 示例 - 4 示例 - 5 示例 - 6 示例 - 7 示例 - 8 组的概念 贪婪模式与非贪婪模式 正则表达式中的符号 符号 描述 re1 | re2 匹配正则表达式 re1 或者 re2 :re1 与 re2 代表两个匹配的字符串信息 ^ 匹配字符串起始部分 $ 匹配字符串终止部分(也就是末尾部分) * 匹配0次或者多次前面出现的正则表达式 + 匹配1次或者多次前面出现的正则表达式 {N} 匹配 N 次前面出现的正则表达式

  • Python进阶篇之正则表达式常用语法总结

    目录 正则表达式概述 1.点-匹配所有字符 2.星号-重复匹配任意次 3.加号-重复匹配多次 4. 花括号-匹配指定次数 5. 问号-贪婪模式和非贪婪模式 6.方括号-匹配几个字符之一 7.起始位置和单行.多行模式 8.括号-组选择 9.反斜杠-对元字符的转义 10.修饰符-可选标志 11.使用正则表达式切割字符串 正则表达式概述 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配. Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模

  • Python 实用技巧之正则表达式查找和替换文本的操作方法

    1.需求 我们想对字符串中的文本做查找和替换. 2.解决方案 对于简单的文本模式,使用str.replace()即可. 例如: text='mark ,帅哥,18,183 帅,mark' print(text.replace('18','19')) print(text) 运行结果: mark ,帅哥,19,193 帅,mark mark ,帅哥,18,183 帅,mark 针对更为复杂的模式,可以使用re模块中的sub()函数. 实例:将日期格式从"11/28/2018"改为&quo

  • 浅谈Python采集网页时正则表达式匹配换行符的问题

    如下所示: p1 = r'(?<=<div class="ds_cr">)(.*?)(?=<div id="pageurl">)' #这样采集html时出错,采集不到数据,正则中 . 是不能匹配换行符,改成如下: p1 = r'(?<=<div class="ds_cr">)([\s\S]*?)(?=<div id="pageurl">)' # 这是我们写的正则表达式

  • Python语法学习之正则表达式的使用详解

    目录 正则表达式中的特殊字符 正则表达式的使用 正则小案例 - 1 正则小案例 - 2 正则小案例 - 3 要想成功的进行字符串的匹配需要使用到正则表达式模块,正则表达式匹配规则以及需要被匹配的字符串.在这三个条件中,模块与字符串都是准备好的,只有匹配规则异常的灵活,而今天这个章节就是认识一下正则表达式中的特殊字符,通过这些字符就可以针对我们想要的数据进行匹配. 正则表达式中的特殊字符 特殊字符 描述 \d 匹配任何十进制的数字,与[0-9]一致 \D 匹配任意非数字 \w 匹配任何字母数字下划

随机推荐