广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python学习--正则表达式
  • 866
分享到

python学习--正则表达式

正则表达式python 2023-01-31 02:01:15 866人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

正则表达式是一种用来匹配字符串的强有力的工具它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,我们就认为它“匹配”了,否则,该字符串就是不合法的。python支持的正则表达式元字符和语法:语法说明实例完整匹配的字

正则表达式是一种用来匹配字符串的强有力的工具它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,我们就认为它“匹配”了,否则,该字符串就是不合法的。

python支持的正则表达式元字符和语法:

语法说明实例完整匹配的字符串
一般字符
匹配自身a1b2c3a1b2c3
.匹配任意除换行符'\n'外的字符
l.llol|lpl|lfl
\
转义字符,使后一个字符改变原来的意思

l\.l

l\\l

l.l

l\l

[...]
对应的位置可以是字符集中任意字符,字符集中的字符可以逐个列出,也可以给出范围如[abc]或[a-c],第一个字符如果是^则表示取反如[^abc]表示除abc以外的其他字符;所有特殊字符在字符集中都是去其原有特殊意义
a[bcd]e

abe

ace

ade

\d数字:[0-9]
a\dc
a2c
\D
非数字:[^\d]a\Dcaxc
\s
空白字符:[空格,\t\r\n\f\v]a\sca c
\S
非空白字符:[^\s]

\w
单词字符:[_a-zA-Z0-9]a\wc
axc

\W非单词字符:[^\w]
a\Wca c
*
匹配前一个字符0或无限次abc*

ab

abcccccc

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

abc

abcccccc

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

ab

abc

{m}
匹配前一个字符m次ab{2}cabbc
{m,n}匹配前一个字符m至n次;若省略m,匹配0至n次;若省略n,匹配m至无限次
ab{1,2}c

abc

abbc

*? +? ??

{m,n}?

使* + ? {m,n}变成非贪婪模式

^

匹配字符串开头

在多行模式中匹配每一行的开头

^abcabc
$

匹配字符串末尾

在多行模式中匹配每一行的末尾

abc$
abc
\A
仅匹配字符串开头\Aabcabc
\Z仅匹配字符串末尾abc\Zabc
\b匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。

\B
匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。

|

左右表达式任意匹配一个

总是先尝试匹配左边表达式,一旦匹配成功则跳过匹配右边的表达式

abc|def

abc

def

(...)
被括起来的表达式作为分组

(abc){2}

ab(12|45)c

abcabc

ab45c

(?#...)#后的内容作为注释被忽略
ab(?#com..)123ab123

反斜杠

与大多数编程语言相同,正则表达式里使用"\"作为转义字符,这就可能造成反斜杠困扰。假如你需要匹配文本中的字符"\",那么使用编程语言表示的正则表达式里将需要4个反斜杠"\\\\":前两个和后两个分别用于在编程语言里转义成反斜杠,转换成两个反斜杠后再在正则表达式里转义成一个反斜杠。Python里的原生字符串很好地解决了这个问题,这个例子中的正则表达式可以使用r"\\"表示。同样,匹配一个数字的"\\d"可以写成r"\d"。有了原生字符串,你再也不用担心是不是漏写了反斜杠,写出来的表达式也更直观。


看一个例子:\d{3}\s+\d{3,8}

我们来从左到右解读一下:

\d{3}表示匹配3个数字,例如'010';

\s可以匹配一个空格(也包括Tab等空白符),所以\s+表示至少有一个空格,例如匹配' ',' '等;

\d{3,8}表示3-8个数字,例如'1234567'。

综合起来,上面的正则表达式可以匹配以任意个空格隔开的带区号的电话号码。

如果要匹配'010-12345'这样的号码呢?由于'-'是特殊字符,在正则表达式中,要用'\'转义,所以,上面的正则是\d{3}\-\d{3,8}。


进阶

要做更精确地匹配,可以用[]表示范围,比如:

[0-9a-zA-Z\_]可以匹配一个数字、字母或者下划线;

[0-9a-zA-Z\_]+可以匹配至少由一个数字、字母或者下划线组成的字符串,比如'a100','0_Z','Py3000'等等;

[a-zA-Z\_][0-9a-zA-Z\_]*可以匹配由字母或下划线开头,后接任意个由一个数字、字母或者下划线组成的字符串,也就是Python合法的变量;

[a-zA-Z\_][0-9a-zA-Z\_]{0, 19}更精确地限制了变量的长度是1-20个字符(前面1个字符+后面最多19个字符)。

A|B可以匹配A或B,所以[P|p]ython可以匹配'Python'或者'python'。

^表示行的开头,^\d表示必须以数字开头。

$表示行的结束,\d$表示必须以数字结束。

你可能注意到了,py也可以匹配'python',但是加上^py$就变成了整行匹配,就只能匹配'py'了。


re模块

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


re.match

re.match 尝试从字符串的开始匹配一个模式。

语法:

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

参数说明:

pattern    匹配的正则表达式

string     要匹配的字符串。

flags     标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。


匹配成功re.match方法返回一个匹配的对象,否则返回None。


eg:

import re

sss = re.match(r'^\d{3}\-\d{3,8}$', '010-12345')
print(sss)

<_sre.SRE_Match object; span=(0, 9), match='010-12345'>


可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。

group(num=0)    匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。

groups()    返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。


eg:

line = "Cats are smarter than dogs"
matchObj = re.match(r'(.*) are (.*?) .*', line)
if matchObj:
    print("matchObj.group() : ", matchObj.group())
    print("matchObj.groups() : ", matchObj.groups())
    print("matchObj.group(1) : ", matchObj.group(1))
    print("matchObj.group(2) : ", matchObj.group(2))
else:
    print("No match!!")
    
    
matchObj.group() : Cats are smarter than dogs
matchObj.groups() : ('Cats', 'smarter')
matchObj.group(1) : Cats
matchObj.group(2) : smarter


re.search

语法:

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


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

eg:

import re

line = "Cats are smarter than dogs"
matchObj = re.match(r'are', line)
if matchObj:
    print("are ", matchObj.group())
else:
    print("No match!!")

matchObj = re.search(r'are', line)
if matchObj:
    print("are : ", matchObj.group())
else:
    print("No match!!")
    
    
No match!!
are :  are


切分字符串

语法:

split(string[, maxsplit]) | re.split(pattern, string[, maxsplit]):

按照能够匹配的子串将string分割后返回列表。maxsplit用于指定最大分割次数,不指定将全部分割。 

a = re.split(r'\d+', 'one1two2three3four')
print(a)

['one', 'two', 'three', 'four']

s = re.split(r'\s+', 'a b  c    d w')
print(s)
d = re.split(r'[\s\,\;]+', 'a ,a;b,v g,d    , ;')
print(d)

['a', 'b', 'c', 'd', 'w']
['a', 'a', 'b', 'v', 'g', 'd', '']


findall

findall(string[, pos[, endpos]]) | re.findall(pattern, string[, flags])

搜索string,以列表形式返回全部能匹配的子串。

u = re.findall(r'\d', 'one1two2three3four4')
print(u)

['1', '2', '3', '4']


finditer

finditer(string[, pos[, endpos]]) | re.finditer(pattern, string[, flags])

搜索string,返回一个顺序访问每一个匹配结果(Match对象)的迭代器。

u = re.finditer(r'\d', 'one1two2three3four4')
for i in u:
    print(i.group())
    
1
2
3
4


re.sub用于替换字符串中的匹配项。

语法:

re.sub(pattern, repl, string, max=0)

返回的字符串是在字符串中用 RE 最左边不重复的匹配来替换。如果模式没有发现,字符将被没有改变地返回。

可选参数 count 是模式匹配后替换的最大次数;count 必须是非负整数。缺省值是 0 表示替换所有的匹配

#!/usr/bin/python
import re

phone = "2004-959-559 # This is Phone Number"
num = re.sub(r'#.*', "", phone)
print(num)
nun = re.sub(r'\D', "", num)
print(nun)


2004-959-559 
2004959559


正则表达式非常强大,要讲清楚正则的所有内容,可以写一本厚厚的书了。如果你经常遇到正则表达式的问题,你可能需要一本正则表达式的参考书。


参考:

Http://www.cnblogs.com/huxi/arcHive/2010/07/04/1771073.html

--结束END--

本文标题: python学习--正则表达式

本文链接: https://www.lsjlt.com/news/186250.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python学习--正则表达式
    正则表达式是一种用来匹配字符串的强有力的工具它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,我们就认为它“匹配”了,否则,该字符串就是不合法的。Python支持的正则表达式元字符和语法:语法说明实例完整匹配的字...
    99+
    2023-01-31
    正则表达式 python
  • Python re正则表达式学习
    一、re.match re.match 尝试从字符串的开始匹配一个模式,如:下面的例子匹配第一个单词。 import re   text = "JGood is a handsome boy, he is cool, c...
    99+
    2023-01-31
    正则表达式 Python
  • Python正规则表达式学习指南
    1. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分。正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分强大...
    99+
    2022-06-04
    学习指南 表达式 规则
  • python re 正则表达式学习总结
    # -*- coding: utf-8 -*- import re import os #------------------------------------- re(正则表达式)模块 ------------------------...
    99+
    2023-01-31
    正则表达式 python
  • Shell正则表达式学习笔记
    正规表示法(或称为常规表示法)是透过一些特殊字符的排列,用以搜寻/取代/删除一列或多列文字字符串, 简单的说,正规表示法就是用在字符串的处理上面的一项『表示式』。正规表示法并不是一个工具程序, 而是一个字符...
    99+
    2022-06-04
    学习笔记 正则表达式 Shell
  • Python 爬虫学习笔记之正则表达式
    正则表达式的使用 想要学习 Python 爬虫 , 首先需要了解一下正则表达式的使用,下面我们就来看看如何使用。 . 的使用这个时候的点就相当于一个占位符,可以匹配任意一个字符,什么意思呢?看个例子就知道 ...
    99+
    2022-06-04
    爬虫 学习笔记 正则表达式
  • python基础学习14----正则表达
    正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。 在python中正则表达式被封装到了re模块,通过引入re模块来使用...
    99+
    2023-01-30
    正则 基础 python
  • javascript学习笔记(五)正则表达式
    常用到的元字符有: •. 查找单个字符,除了换行和行结束符; •\w 匹配字母、汉字、数字、下划线等符号; •\s 匹配空白符(包含空格、制表符等...
    99+
    2022-11-21
    正则表达式
  • 怎么学好Python正则表达式
    这篇文章主要讲解了“怎么学好Python正则表达式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么学好Python正则表达式...
    99+
    2022-10-19
  • Python语法学习之正则表达式怎么使用
    这篇文章主要介绍“Python语法学习之正则表达式怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python语法学习之正则表达式怎么使用”文章能帮助大家解决问题。要想成功的进行字符串的匹配需...
    99+
    2023-06-30
  • python 正则表达式
    正则表达式的作用:用来匹配字符串 一、字符串方法 字符串提供的方法是完全匹配,不能进行模糊匹配 s = 'hello world' # 字符串提供的方法是完全匹配,不能进行模糊匹配 print(s.find('ll')) # 2 ...
    99+
    2023-01-30
    正则表达式 python
  • python正则表达式
    笔记:一:简介 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。 主要介绍Python中常用的正则表达式处理函数 提高工作效率,完成内置函数无法完成的任务! 搜索常用正则表达式!-...
    99+
    2023-01-30
    正则表达式 python
  • Go语言入门学习之正则表达式
    目录前言什么是正则表达式MatchString 函数Compile 函数MustCompile 函数FindAllString 函数FindAllStringIndex 函数Spli...
    99+
    2022-11-13
  • 正则表达式基础学习一文入门
    目录正则表达式是什么元字符贪婪匹配、非贪婪匹配和独占模式分组和引用四种匹配模式断言常用正则Demo正则表达式是什么 校验数据的有效性、查找符合要求的文本以及对文本进行切割和替换等操...
    99+
    2023-03-23
    正则表达式基础 正则表达式入门
  • Python语法学习之正则表达式的使用详解
    目录正则表达式中的特殊字符正则表达式的使用正则小案例 - 1正则小案例 - 2正则小案例 - 3要想成功的进行字符串的匹配需要使用到正则表达式模块,正则表达式匹配规则以及需要被匹配的...
    99+
    2022-11-10
  • Python语法学习之正则表达式的量词汇总
    目录正则表达式中的符号示例 - 1示例 - 2示例 - 3示例 - 4示例 - 5示例 - 6示例 - 7示例 - 8组的概念贪婪模式与非贪婪模式正则表达式中的符号 符号描述re1 ...
    99+
    2022-11-10
  • Python正则表达式的小练习分享
    目录匹配网址 url 的小练习匹配邮箱地址的小练习获取前端代码内容的练习匹配网址 url 的小练习 定义一个函数,判断 url 是否是一个正常的地址。 定义一个函数,只获取 url ...
    99+
    2022-11-10
  • Python 正则表达式:compile
    本文以匹配×××ID为例,介绍re模块的compile与match的用法复杂匹配 = re.compile(正则表达式): 将正则表达式实例化             +        re.match(要匹配的字符串): 从字符串开 头/...
    99+
    2023-01-31
    正则表达式 Python compile
  • Python 正则表达式:search
    本文介绍re模块的search的用法复杂匹配 = re.compile(正则表达式): 将正则表达式实例化             +        re.search(要匹配的字符串): 从字符串开头 开始匹配简单匹配 = re.sear...
    99+
    2023-01-31
    正则表达式 Python search
  • Python 正则表达式:split
    作用:用正则表达式的字符分割字符串,正则的字符会被抛弃。本文以 提取URL的地址与参数 为例,介绍re模块的split的用法: 返回值 -> 列表复杂匹配 = re.compile(正则表达式): 将正则表达式实例化         ...
    99+
    2023-01-31
    正则表达式 Python split
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作