iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python正则表达式re.sub各个参数的超详细讲解
  • 856
分享到

python正则表达式re.sub各个参数的超详细讲解

2024-04-02 19:04:59 856人浏览 八月长安

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

摘要

目录一、re.sub(pattern, repl, string, count=0, flags=0)二、参数讲解1、pattern参数2、repl参数2.1、repl是字符串2.2

一、re.sub(pattern, repl, string, count=0, flags=0)

re是正则的表达式,sub是substitute,表示替换

re.sub共有五个参数。

re.sub(pattern, repl, string, count=0, flags=0)

其中三个必选参数:pattern, repl, string

两个可选参数:count, flags

二、参数讲解

1、pattern参数

pattern,表示正则中的模式字符串,这个没太多要解释的。

需要知道的是:

反斜杠加数字:\N,则对应着匹配的组:matched group

比如\6,表示匹配前面pattern中的第6个group

意味着,pattern中,前面肯定是存在对应的组,后面也才能去引用

举个例子

hello xinfa, nihao xinfa

我们想把xinfa替换成linxinfa,就可以这样:

import re

inputStr = "hello xinfa, nihao xinfa"
replacedStr = re.sub(r"hello (\w+), nihao \1", "linxinfa", inputStr)
print("replacedStr = ", replacedStr) 
#输出结果为: replacedStr = linxinfa

注意,上面的(\w+),括号括起来表示一个组;

里面的\w表示匹配字母、数字、下划线,等价于[A-Za-z0-9_]

然后+表示匹配前面的子表达式一次或多次。

所以(\w+)就是匹配多个字母、数字、下划线的意思。表达式中的\1表示匹配第一个组,第一个组就是(\w+)

2、repl参数

repl,就是replacement,被替换的字符串的意思。

repl可以是字符串,也可以是函数。

2.1、repl是字符串

如果repl是字符串的话,其中的任何反斜杠转义字符,都会被处理。

比如:

\n:会被处理为对应的换行符;

\r:会被处理为回车符;

其他不能识别的转移字符,则只是被识别为普通的字符: 比如\j,会被处理为j这个字母本身;

比较特殊的是\g<n>\g表示匹配组,n是组的id,比如\g<1>表示第一个组。

还是上面的例子,我们想把xinfa提取出来,只剩xinfa

hello xinfa, nihao xinfa

就可以这样写:

import re

inputStr = "hello xinfa, nihao xinfa"
replacedStr = re.sub(r"hello (\w+), nihao \1", "\g<1>", inputStr)
print("replacedStr = ", replacedStr) 
#输出结果为: replacedStr = xinfa

2.2、repl是函数

比如输入内容是:

hello 123 world 456

想要把其中的数字部分,都加上111,变成:

hello 234 world 567

那么就可以这样:

#!/usr/bin/python
# -*- coding: utf-8 -*-

import re;

def PythonReSubDemo():
    """
        demo Pyton re.sub
    """
    inputStr = "hello 123 world 456"

    def _add111(matched):
        intStr = matched.group("number")
        intValue = int(intStr)
        addedValue = intValue + 111
        addedValueStr = str(addedValue)
        return addedValueStr

    replacedStr = re.sub("(?P<number>\d+)", _add111, inputStr)
    print("replacedStr=",replacedStr) 
    #输出结果为:replacedStr= hello 234 world 567

if __name__=="__main__":
    pythonReSubDemo()

注意上面,用了一个?P<value>

?P的意思就是命名一个名字为value的组,匹配规则符合后面的\d+

3、string参数

string,即表示要被处理,要被替换的那个string字符串。

4、count参数

举例说明:

继续之前的例子,假如对于匹配到的内容,只处理其中一部分。

比如:

hello 123 world 456 nihao 789

我们只是想要处理前面两个数字:123,456,分别给他们加111,而不处理789

那么就可以这样:

#!/usr/bin/python
# -*- coding: utf-8 -*-

import re;

def pythonReSubDemo():
    """
        demo Pyton re.sub
    """
    inputStr = "hello 123 world 456 nihao 789"

    def _add111(matched):
        intStr = matched.group("number")
        intValue = int(intStr)
        addedValue = intValue + 111 
        addedValueStr = str(addedValue)
        return addedValueStr

    replacedStr = re.sub("(?P<number>\d+)", _add111, inputStr, 2)
    print("replacedStr = ", replacedStr)
	#输出结果为:replacedStr = hello 234 world 567 nihao 789

if __name__=="__main__":
    pythonReSubDemo()

5、flags参数

flags编译标志。编译标志让你可以修改正则表达式的一些运行方式。

re模块中标志可以使用两个名字,一个是全名如IGNORECASE,一个是缩写,一字母形式如I。(如果你熟悉 Perl 的模式修改,一字母形式使用同样的字母;例如re.VERBOSE的缩写形式是re.X。)

多个标志可以通过按位它们来指定。如re.I | re.M被设置成IM标志。

下面列举下常用的编译标志

5.1、IGNORECASE(简写I)

使匹配对大小写不敏感;

举个例子,[A-Z]也可以匹配小写字母,Spam可以匹配 Spam、spamspAM

5.2、LOCALE(简写L)

localesC语言库中的一项功能,是用来为需要考虑不同语言的编程提供帮助的。

举个例子,如果你正在处理法文文本,你想用 w+来匹配文字,但w只匹配字符类[A-Za-z],它并不能匹配é

如果你的系统配置适当且本地化设置为法语,那么内部的 C函数将告诉程序é也应该被认为是一个字母。

当在编译正则表达式时使用 LOCALE标志会得到用这些 C函数来处理 w后的编译对象,这会更慢,但也会象你希望的那样可以用w+来匹配法文文本。

5.3、MULTILINE(简写M)

MULTILINE多行的意思,改变 ^ 和 $ 的行为。

使用 ^只匹配字符串的开始,而 $则只匹配字符串的结尾和直接在换行前(如果有的话)的字符串结尾。

当本标志指定后,^匹配字符串的开始和字符串中每行的开始。同样的, $元字符匹配字符串结尾和字符串中每行的结尾(直接在每个换行之前)。

例如

import re

s='hello \nworld \nxinfa'
print(s)

pattern=re.compile(r'^\w+')
print(re.findall(pattern,s))

#加上flags=re.M
pattern=re.compile(r'^\w+', flags=re.M)
print(re.findall(pattern,s))

输出结果为

hello 
world 
xinfa
['hello']
['hello', 'world', 'xinfa']

5.4、DOTALL(简写S)

此模式下 .的匹配不受限制,可匹配任何字符,包括换行符,也就是默认是不能匹配换行符。

例:

 #!/usr/bin/python
# -*- coding: utf-8 -*-
import re

s = '''first line
    ...: second line
    ...: third line'''

regex=re.compile('.+')
print(regex.findall(s))

regex=re.compile('.+', re.S)
print(regex.findall(s))

输出结:

['first line', '    ...: second line', '    ...: third line']
['first line\n    ...: second line\n    ...: third line']

5.5、VERBOSE(简写X)

冗余模式, 此模式忽略正则表达式中的空白和#号的注释。
例:

email_regex = re.compile("[\w+\.]+@[a-zA-Z\d]+\.(com|cn)")
 
email_regex = re.compile("""[\w+\.]+  # 匹配@符前的部分
                            @  # @符
                            [a-zA-Z\d]+  # 邮箱类别
                            \.(com|cn)   # 邮箱后缀  """, re.X)

补充:repl为函数时的用法

当repl为函数时的替换更加灵活,此时可以在函数中自定义在某种特定的匹配下替换为某种特定的字符。

示例

import re
 
# 将匹配的数字乘以 2
def double(matched):
    print('matched: ',matched)
    print("matched.group('value'): ",matched.group('value'))
    value = int(matched.group('value'))
    return str(value * 2)
 
string = 'A23G4HFD567'
print(re.sub('(?P<value>\d+)', double, string))

总结

到此这篇关于python正则表达式re.sub各个参数的超详细讲解的文章就介绍到这了,更多相关python正则表达式re.sub参数内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: python正则表达式re.sub各个参数的超详细讲解

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

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

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

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

下载Word文档
猜你喜欢
  • python正则表达式re.sub各个参数的超详细讲解
    目录一、re.sub(pattern, repl, string, count=0, flags=0)二、参数讲解1、pattern参数2、repl参数2.1、repl是字符串2.2...
    99+
    2024-04-02
  • 超详细讲解python正则表达式
    目录正则表达式1.1 正则表达式字符串1.1.1 元字符1.1.2 字符转义1.1.3 开始与结束字符1.2 字符类1.2.1 定义字符类1.2.2 字符串取反1.2.3 区间1.2...
    99+
    2024-04-02
  • Python正则表达式re.sub()用法详解
    目录1.匹配单个数字或字母2.匹配多个数字或字母3.匹配其他总结 源代码、参数及其意义: def sub(pattern, repl, string, count=0, f...
    99+
    2024-04-02
  • python正则表达式用法超详细讲解大全
    目录一、re.compile 函数二、正则表达式表示字符表示数字匹配边界三、re模块的高级用法1、findall:pattern在string里所有的非重复匹配,返回一个迭代器ite...
    99+
    2024-04-02
  • 正则表达式匹配ip地址超详细讲解
    IP地址是一个由32位二进制数字组成的地址,为了方便表示和理解,通常将其表示为四个以`.`分隔的十进制数。正则表达式可以用来匹配IP...
    99+
    2023-08-09
    正则表达式
  • Python 正则表达式详解
    目录1.正则表达式是什么2.1用正则表达式2.2匹配原理2.3常用函数总结1.正则表达式是什么 很简单就是一种字符串匹配,eg: 比如你在注册账户时我们需要对用户的用户名判断是否合法...
    99+
    2024-04-02
  • Python正则表达式中flags参数的实例详解
    目录flags参数忽略大小写多行模式匹配任何字符补充:正则表达式中的flags总结flags参数 re.I    IGNORECASE    ...
    99+
    2024-04-02
  • python使用正则表达式(Regular Expression)方法超详细
    正则表达式是一种用于匹配、查找和提取字符串的强大工具。在Python中,我们可以使用内置的re模块来使用正则表达式。下面是一些常用的...
    99+
    2023-08-17
    Python
  • java正则表达式匹配规则超详细总结
    目录1 单个字符的匹配规则如下:2 多个字符的匹配规则如下:3 复杂匹配规则主要有:4 提取匹配的字符串子段5 非贪婪匹配6 替换和搜索6.1 分割字符串6.2 搜索字符串6.3 替...
    99+
    2024-04-02
  • python正则表达式最详解
    目录一、正则表达式–元字符1.数量词2.字符匹配3.边界匹配4.组5.匹配模式参数二、方法re.findallre.matchgroup匹配对象re.searchre.compile...
    99+
    2024-04-02
  • Python中使用正则表达式及正则表达式匹配规则详解
    目录1 导库2 使用模板3 说明4 示例5 正则表达式匹配规则1 导库 import re 2 使用模板 re_pattern = re.compile(pattern, flags...
    99+
    2023-03-22
    Python正则表达式匹配规则 Python正则表达式
  • Python正则表达式的应用详解
    目录正则表达式的定义Python对正则表达式的支持示例例1:验证输入的用户名是否有效,用户名由长度为6到20的字母、数字、下划线组成例2:从字符串中找到与正则表达式匹配的部分例3:从...
    99+
    2024-04-02
  • Python3的正则表达式详解
    目录1.简介2.切分字符串3.分组4.贪婪匹配5.编译总结1.简介 # 正则表达式:用来匹配字符串的武器; # 设计思想:用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符...
    99+
    2024-04-02
  • Python正则表达式re.compile()和re.findall()详解
    目录前言网页中的代码:提取的方法:re.findall中参数re.S的意义:参考:总结前言 在使用爬虫提取网页中的部分信息时,采用到了re.compile()与re.findall(...
    99+
    2024-04-02
  • Python正则表达式re.search()用法详解
    re.search():匹配整个字符串,并返回第一个成功的匹配。如果匹配失败,则返回None  pattern: 匹配的规则, string : 要匹配的内容, flag...
    99+
    2024-04-02
  • Python正则表达式保姆式教学详细教程
    目录一、re模块1.导入re模块2.findall()的语法:二、正则表达式1.普通字符2.元字符(二)正则的使用1.编译正则2.正则对象的使用方法3.Match object 的操...
    99+
    2024-04-02
  • Python字符串与正则表达式详细介绍
    目录一、字符串相关操作 二、正则表达式相关操作一、字符串相关操作  1.统计所输入字符串中单词的个数,单词之间用空格分隔。其运行效果如下图所示。 s=input(...
    99+
    2024-04-02
  • python的正则表达式和re模块详解
    目录一、正则表达式基础二、python re模块三、进阶总结一、正则表达式基础 二、python re模块 注意:正则表达式 != re eg: 注意:如果返回的是对象,则需要...
    99+
    2024-04-02
  • 正则表达式regular expression详述(一)284475过程讲解
     正则表达式是regular expression,看来英文比中文要好理解多了,就是检查表达式符不符合规定!!正则表达式有一个功能十分强大而又十分复杂的对象RegExp,在...
    99+
    2023-05-20
    正则表达式regular expression详述
  • Python 正则表达式详解(建议收藏!)
    目录 match 匹配字符串 单字符匹配 . 匹配任意一个字符 \d 匹配数字 \D 匹配非数字 \s 匹配特殊字符,如空白,空格,tab等 \S 匹配非空白 \w 匹配单词、字符,如大小写字母,数字,_ 下划线 \W 匹配非单词字符 [ ...
    99+
    2023-09-01
    正则表达式 python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作