Python正则表达式re模块简明笔记
PYTHON正则表达式re模块使用说明

PYTHON正则表达式re模块使⽤说明⾸先,运⾏ Python 解释器,导⼊ re 模块并编译⼀个 RE:#!pythonPython 2.2.2 (#1, Feb 10 2003, 12:57:01)>>> import re>>> p = pile('[a-z]+')>>> p<_sre.SRE_Pattern object at 80c3c28>现在,你可以试着⽤ RE 的 [a-z]+ 去匹配不同的字符串。
⼀个空字符串将根本不能匹配,因为 + 的意思是 “⼀个或更多的重复次数”。
在这种情况下 match() 将返回 None,因为它使解释器没有输出。
你可以明确地打印出 match() 的结果来弄清这⼀点。
#!python>>> p.match("")>>> print p.match("")None现在,让我们试着⽤它来匹配⼀个字符串,如 "tempo"。
这时,match() 将返回⼀个 MatchObject。
因此你可以将结果保存在变量⾥以便后⾯使⽤。
#!python>>> m = p.match( 'tempo')>>> print m<_sre.SRE_Match object at 80c4f68>现在你可以查询 `MatchObject` 关于匹配字符串的相关信息了。
MatchObject 实例也有⼏个⽅法和属性;最重要的那些如下所⽰:⽅法/属性作⽤group()返回被 RE 匹配的字符串start()返回匹配开始的位置end()返回匹配结束的位置span()返回⼀个元组包含匹配 (开始,结束) 的位置试试这些⽅法不久就会清楚它们的作⽤了:#!python>>> m.group()'tempo'>>> m.start(), m.end()(0, 5)>>> m.span()(0, 5)group() 返回 RE 匹配的⼦串。
黑马程序员Python教程python re 模块及正则表达式调用认识-3

python re 模块及正则表达式调用认识-32)也可以是一段有序字符集,for example[a-z] will match any lower case ASCII letter,[0-5][0-9] will match all the two-digits numbers from 00 to 59, and[0-9A-Fa-f] will match any hexadecimal digit. 如果'-'字符放在了字符类的开头处或末尾处,该字符就会被当作一个普通字符来看待,(e.g.[a\-z]) or if it’s placed as the first or last character (e.g.[a-]),it will match a literal'-'.>>> print re.search(r'[a-z]{3}','34asdfg98dfg').group()asd>>> print re.findall(r'[a-z]{3}','34asdfg98dfg')['asd', 'dfg']>>> print re.findall(r'[0-5][0-9]','34asFGg38dfg')['34', '38'][0-9a-fA-F] 匹配单个的十六进制数字,并且大小写不敏感。
也可以结合范围定义与单个字符定义。
[0-9a-fxA-FX] 匹配一个十六进制数字或字母X。
再次强调一下,字符和范围定义的先后顺序对结果没有影响。
>>> print re.findall(r'[0-9A-Fa-f]','4A 80 7f 9z')#实际就是0-9,A-F,a-f 这一顺序数字和字符间进行匹配['4', 'A', '8', '0', '7', 'f', '9']>>> print re.findall(r'[0-9a-fxA-FX]{3}','we2rt4fxdef8AXgh')#可以添加特定的字符x,但是def被匹配了,why?['4fx', 'def', '8AX']>>>>>> print re.findall(r'[a\-z]..','AXgh-erg5-6yfhka-jjhh') # a-z及其-都匹配,长度3个字符['-er', '-6y', 'a-j']>>> print re.findall(r'[a-]..','AXgh-erg5-6yfhka-jjhh')#z省略,匹配到最后['-er', '-6y', 'a-j']>>>3)若其中含有特殊字符,则特殊字符作为普通字符对待,For example,[(+*)] will match any of the literal characters'(','+','*', or')'.>>> print re.findall(r'[(+*)].','AXg(df+dgf4*dfg34)fdg')['(d', '+d', '*d', ')f']4)\w or\S也可以包含在其中,是否进行匹配主要取决于LOCALE or UNICODE mode 字符模式。
Python系列之正则表达式详解

Python系列之正则表达式详解Python 正则表达式模块 (re) 简介Python 的 re 模块(Regular Expression 正则表达式)提供各种正则表达式的匹配操作,和 Perl 脚本的正则表达式功能类似,使⽤这⼀内嵌于 Python 的语⾔⼯具,尽管不能满⾜所有复杂的匹配情况,但⾜够在绝⼤多数情况下能够有效地实现对复杂字符串的分析并提取出相关信息。
Python 会将正则表达式转化为字节码,利⽤ C 语⾔的匹配引擎进⾏深度优先的匹配。
表 1. 正则表达式元字符和语法符号说明实例.表⽰任意字符,如果说指定了 DOTALL 的标识,就表⽰包括新⾏在内的所有字符。
'abc' >>>'a.c' >>>结果为:'abc'^表⽰字符串开头。
'abc' >>>'^abc' >>>结果为:'abc'$表⽰字符串结尾。
'abc' >>>'abc$' >>>结果为:'abc'*, +, ?'*'表⽰匹配前⼀个字符重复 0 次到⽆限次,'+'表⽰匹配前⼀个字符重复 1次到⽆限次,'?'表⽰匹配前⼀个字符重复 0 次到1次'abcccd' >>>'abc*' >>>结果为:'abccc''abcccd' >>>'abc+' >>>结果为:'abccc''abcccd' >>>'abc?' >>>结果为:'abc'*?, +?, ??前⾯的*,+,?等都是贪婪匹配,也就是尽可能多匹配,后⾯加?号使其变成惰性匹配即⾮贪婪匹配'abc' >>>'abc*?' >>>结果为:'ab''abc' >>>'abc??' >>>结果为:'ab''abc' >>>'abc+?' >>>结果为:'abc'{m}匹配前⼀个字符 m 次'abcccd' >>>'abc{3}d' >>>结果为:'abcccd' {m,n}匹配前⼀个字符 m 到 n 次'abcccd' >>> 'abc{2,3}d' >>>结果为:'abcccd' {m,n}?匹配前⼀个字符 m 到 n 次,并且取尽可能少的情况'abccc' >>> 'abc{2,3}?' >>>结果为:'abcc'\对特殊字符进⾏转义,或者是指定特殊序列 'a.c' >>>'a\.c' >>> 结果为: 'a.c'[]表⽰⼀个字符集,所有特殊字符在其都失去特殊意义,只有: ^ - ] \ 含有特殊含义'abcd' >>>'a[bc]' >>>结果为:'ab'|或者,只匹配其中⼀个表达式,如果|没有被包括在()中,则它的范围是整个正则表达式'abcd' >>>'abc|acd' >>>结果为:'abc' ( … )被括起来的表达式作为⼀个分组. findall 在有组的情况下只显⽰组的内容 'a123d' >>>'a(123)d' >>>结果为:'123'(?#...)注释,忽略括号内的内容特殊构建不作为分组 'abc123' >>>'abc(?#fasd)123' >>>结果为:'abc123'(?= …)表达式’…’之前的字符串,特殊构建不作为分组在字符串’ pythonretest ’中 (?=test) 会匹配’pythonre ’(?!...)后⾯不跟表达式’…’的字符串,特殊构建不作为分组如果’ pythonre ’后⾯不是字符串’ test ’,那么(?!test) 会匹配’ pythonre ’(?<=… )跟在表达式’…’后⾯的字符串符合括号之后的正则表达式,特殊构建不作为分组正则表达式’ (?<=abc)def ’会在’ abcdef ’中匹配’def ’(?:)取消优先打印分组的内容'abc' >>>'(?:a)(b)' >>>结果为'[b]'?P<>指定Key'abc' >>>'(?P<n1>a)>>>结果为:groupdict{n1:a}表 2. 正则表达式特殊序列特殊表达式序列说明\A只在字符串开头进⾏匹配。
python正则表达式re使用模块(match()、search()和compile())

python正则表达式re使⽤模块(match()、search()和compile())摘录 python核⼼编程python的re模块允许多线程共享⼀个已编译的正则表达式对象,也⽀持命名⼦组。
下表是常见的正则表达式属性:函数/⽅法描述仅仅是re模块函数compile(pattern,flags=0)使⽤任何可选的标记来编译正则表达式的模式,然后返回⼀个正则表达式对象re模块函数和正则表达式对象的⽅法match(pattern,string,flags=0)尝试使⽤带有可选标记的正则表达式的模式来匹配字符串,成功则返回匹配的对象,失败则返回Nonesearch(pattern,string,flags=0)使⽤可选标记搜索字符串中第⼀次出现的正则表达式模式,成功则返回匹配对象,失败则返回Nonefindall(pattern,string[,flags])查找字符串中所有(⾮重复)出现的正则表达式模式,返回⼀个匹配列表finditer(pattern,string,[,flags])和findall()函数相同,但返回的是⼀个迭代器。
对于每次匹配,迭代器都返回⼀个匹配对象split(pattern,string,max=0)根据正则表达式的模式分隔符,split函数将字符串分割为列表,然后返回成功匹配的列表,分割最多操作max次(默认分割所有匹配成功的位置)re模块函数和正则表达式对象⽅法sub(pattern,repl,string,count=0)使⽤repl替换正则表达式模式在字符串中出现的位置,除⾮定义count,否则替换所有purge()清除隐式编译的正则表达式模式常⽤的匹配对象⽅法group(num=0)返回整个匹配对象,或者编号为num的特定⼦组groups(default=None)返回⼀个包含所有匹配⼦组的元组(如果没有,则返回⼀个空元组)groupdict(default=None)返回⼀个包含所有匹配的命名⼦组的字典,所有⼦组名称作为字典的键(如没有,则返回⼀个空字典)常⽤的模块属性re.I、re.IGNORECASE不区分⼤写的匹配re.L、re.LOCALE根据所使⽤的本地语⾔环通过\w\W\b\B\s\S实现匹配re.M、re.MULTILINE^和$分别匹配⽬标字符串中⾏的起始和结尾,⽽不是严格的匹配整个字符串本⾝的开始和结尾re.S、re.DOTALL点号.通常匹配除了换⾏符\n之外的所有单个字符,该标记表⽰点号能够匹配全部字符re.X、re.VERBOSE通过反斜线转义,否则所有空格加上#(以及在该⾏中所有后续问题)都被忽略,除⾮在⼀个字符类中或者允许注释并且提⾼可读性compile()编译正则表达式在模式匹配发⽣之前,正则表达式模式必须编译成正则表达式对象,⽽且正则表达式在执⾏的过程中可能进⾏多次的⽐较操作。
python之re模块(正则表达式)分组、断言详解

python之re模块(正则表达式)分组、断⾔详解提⽰:阅读本⽂需要有⼀定的正则表达式基础。
正则表达式中的断⾔,作为⾼级应⽤出现,倒不是因为它有多难,⽽是概念⽐较抽象,不容易理解⽽已,今天就让⼩菜通俗的讲解⼀下。
如果不⽤断⾔,以往⽤过的那些表达式,仅仅能获取到有规律的字符串,⽽不能获取⽆规律的字符串。
举个例⼦,⽐如html源码中有<title>xxx</title>标签,⽤以前的知识,我们只能确定源码中的<title>和</title>是固定不变的。
因此,如果想获取页⾯标题(xxx),充其量只能写⼀个类似于这样的表达式:<title>.*</title>,⽽这样写匹配出来的是完整的<title>xxx</title>标签,并不是单纯的页⾯标题xxx。
想解决以上问题,就要⽤到断⾔知识。
在讲断⾔之前,读者应该先了解分组,这有助于理解断⾔。
分组在正则中⽤()表⽰,根据⼩菜理解,分组的作⽤有两个:n 将某些规律看成是⼀组,然后进⾏组级别的重复,可以得到意想不到的效果。
n 分组之后,可以通过后向引⽤简化表达式。
先来看第⼀个作⽤,对于IP地址的匹配,简单的可以写为如下形式:\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}但仔细观察,我们可以发现⼀定的规律,可以把.\d{1,3}看成⼀个整体,也就是把他们看成⼀组,再把这个组重复3次即可。
表达式如下:\d{1,3}(.\d{1,3}){3}这样⼀看,就⽐较简洁了。
再来看第⼆个作⽤,就拿匹配<title>xxx</title>标签来说,简单的正则可以这样写:<title>.*</title>可以看出,上边表达式中有两个title,完全⼀样,其实可以通过分组简写。
表达式如下:<(title)>.*</\1>这个例⼦实际上就是反向引⽤的实际应⽤。
python的re库用法

Python的re库用法1. 介绍Python的re库是一个强大的正则表达式处理库,提供了丰富的功能和方法,用于在文本中进行模式匹配和搜索。
正则表达式是一种描述文本模式的工具,可以用来检查一个字符串是否符合某种模式、从字符串中提取特定信息或者替换字符串中的部分内容。
re库使得我们可以使用正则表达式来处理各种复杂的字符串操作。
2. 正则表达式基础2.1 字符匹配正则表达式中最基本的元素就是字符匹配,即匹配具体的字符。
例如,正则表达式a表示匹配单个字符a。
还可以使用.来匹配任意字符。
2.2 字符集合字符集合允许我们指定多个可能出现在某个位置上的字符。
使用方括号[]来定义字符集合。
例如,正则表达式[abc]表示匹配单个字符a、b或者c。
2.3 转义字符有些特殊字符在正则表达式中有特殊含义,比如.表示任意字符。
如果我们要匹配这些特殊字符本身,就需要使用转义字符\。
例如,正则表达式\.表示匹配单个.。
2.4 重复匹配正则表达式允许对字符或者字符集合进行重复匹配。
常用的重复匹配符号包括*、+和。
其中,*表示匹配0次或多次,+表示匹配1次或多次,而?表示匹配0次或1次。
2.5 边界匹配边界匹配用于指定字符串的开始和结束位置。
正则表达式中的元字符\b表示单词边界,\B表示非单词边界。
3. re库的常用函数3.1 match函数match函数用于从字符串的开始位置进行匹配,如果字符串开头不符合正则表达式,则返回None。
它的基本语法为:re.match(pattern, string, flags=0)其中,pattern为正则表达式,string为要匹配的字符串,flags为可选参数,用于控制匹配方式。
3.2 search函数search函数用于在整个字符串中搜索第一个符合正则表达式的位置,并返回一个包含该位置信息的match对象。
它的基本语法为:re.search(pattern, string, flags=0)3.3 findall函数findall函数用于搜索整个字符串,并返回所有符合正则表达式的非重叠模式。
python3正则模块re的使用方法详解

python3正则模块re的使⽤⽅法详解⼀、正则1.正则表达式定义正则就是⽤⼀些具有特殊含义的符号组合到⼀起(称为正则表达式)来描述字符或者字符串的⽅法。
或者说:正则就是⽤来描述⼀类事物的规则。
(在Python中)它内嵌在Python中,并通过 re 模块实现。
正则表达式模式被编译成⼀系列的字节码,然后由⽤ C 编写的匹配引擎执⾏。
2.⽬的和特点给定⼀个正则表达式和另⼀个字符串,我们可以达到如下的⽬的:给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”):可以通过正则表达式,从字符串中获取我们想要的特定部分。
正则表达式的特点是:灵活性、逻辑性和功能性⾮常强;可以迅速地⽤极简单的⽅式达到字符串的复杂控制。
由于正则表达式主要应⽤对象是⽂本,因此它在各种⽂本编辑器场合都有应⽤,⼩到著名编辑器EditPlus,⼤到Microsoft Word、Visual Studio等⼤型编辑器,都可以使⽤正则表达式来处理⽂本内容。
3.常⽤的正则表达式4.贪婪模式与⾮贪婪模式正则表达式通常⽤于在⽂本中查找匹配的字符串。
Python⾥数量词默认是贪婪的(在少数语⾔⾥也可能是默认⾮贪婪),总是尝试匹配尽可能多的字符;⾮贪婪的则相反,总是尝试匹配尽可能少的字符。
例如:正则表达式"ab*“如果⽤于查找"abbbc”,将找到"abbb"。
⽽如果使⽤⾮贪婪的数量词"ab*?",将找到"a"。
5.反斜杠与⼤多数编程语⾔相同,正则表达式⾥使⽤"“作为转义字符,这就可能造成反斜杠困扰。
假如你需要匹配⽂本中的字符”",那么使⽤编程语⾔表⽰的正则表达式⾥将需要4个反斜杠"\\":前两个和后两个分别⽤于在编程语⾔⾥转义成反斜杠,转换成两个反斜杠后再在正则表达式⾥转义成⼀个反斜杠。
Python⾥的原⽣字符串很好地解决了这个问题,这个例⼦中的正则表达式可以使⽤r"\“表⽰。
python中re模块的用法

python中re模块的用法re模块是Python中用于处理正则表达式的模块,可以用来进行文本的匹配、查找和替换等操作。
常用的re模块方法有:1. re.match(pattern, string, flags=0):从字符串的开始位置匹配一个模式,返回一个匹配对象。
2. re.search(pattern, string, flags=0):在字符串中搜索匹配模式的第一个位置,返回一个匹配对象。
3. re.findall(pattern, string, flags=0):返回字符串中所有匹配模式的非重叠列表。
4. re.finditer(pattern, string, flags=0):返回一个迭代器,包含字符串中所有匹配模式的迭代对象。
5. re.sub(pattern, repl, string, count=0, flags=0):用指定的替换字符串替换所有匹配模式。
6. re.split(pattern, string, maxsplit=0, flags=0):根据匹配模式进行字符串分割,返回一个列表。
7. repile(pattern, flags=0):将正则表达式编译成一个Pattern对象,可以重复使用。
在进行正则表达式匹配时,需要了解一些常用的正则表达式符号,例如:1. .(点号):匹配任意字符,除了换行符。
2. *(星号):匹配前一个字符的零个或多个重复。
3. +(加号):匹配前一个字符的一个或多个重复。
4. ?(问号):匹配前一个字符的零个或一个重复。
5. \d:匹配任意数字字符。
6. \w:匹配任意字母、数字或下划线字符。
7. []:定义一个字符集合。
8. ():分组匹配。
以上只是re模块的常用方法和一些常用的正则表达式符号,更详细的用法可以参考Python官方文档中的re模块说明。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Python正则表达式re模块简明笔记Python正则表达式re模块简明笔记要注意的是,正则表达式并不是一个程序,而是用于处理字符串的一种模式,如果你想用它来处理字符串,就必须使用支持正则表达式的工具,比如Linux 中的awk, sed, grep,或者编程语言Perl, Python, Java 等等。
作者:FunHacks来源:FunHacks|2016-12-28 11:20收藏分享简介正则表达式(regular expression)是可以匹配文本片段的模式。
最简单的正则表达式就是普通字符串,可以匹配其自身。
比如,正则表达式‘hello’ 可以匹配字符串‘hello’。
要注意的是,正则表达式并不是一个程序,而是用于处理字符串的一种模式,如果你想用它来处理字符串,就必须使用支持正则表达式的工具,比如Linux 中的awk, sed, grep,或者编程语言Perl, Python, Java 等等。
正则表达式有多种不同的风格,下表列出了适用于Python 或Perl 等编程语言的部分元字符以及说明:re 模块在Python 中,我们可以使用内置的re 模块来使用正则表达式。
有一点需要特别注意的是,正则表达式使用\对特殊字符进行转义,比如,为了匹配字符串‘’,我们需要使用正则表达式'python\.org',而Python 的字符串本身也用\转义,所以上面的正则表达式在Python 中应该写成'python\\.org',这会很容易陷入\的困扰中,因此,我们建议使用Python 的原始字符串,只需加一个r 前缀,上面的正则表达式可以写成:r'python\.org're 模块提供了不少有用的函数,用以匹配字符串,比如:∙compile 函数∙match 函数∙search 函数∙findall 函数∙finditer 函数∙split 函数∙sub 函数∙subn 函数re 模块的一般使用步骤如下:∙使用compile 函数将正则表达式的字符串形式编译为一个Pattern 对象∙通过Pattern 对象提供的一系列方法对文本进行匹配查找,获得匹配结果(一个Match 对象)∙最后使用Match 对象提供的属性和方法获得信息,根据需要进行其他的操作compile 函数compile 函数用于编译正则表达式,生成一个Pattern 对象,它的一般使用形式如下:pile(pattern[, flag])其中,pattern 是一个字符串形式的正则表达式,flag 是一个可选参数,表示匹配模式,比如忽略大小写,多行模式等。
下面,让我们看看例子。
import re# 将正则表达式编译成Pattern 对象pattern = pile(r'\d+')在上面,我们已将一个正则表达式编译成Pattern 对象,接下来,我们就可以利用pattern 的一系列方法对文本进行匹配查找了。
Pattern 对象的一些常用方法主要有:∙match 方法∙search 方法∙findall 方法∙finditer 方法∙split 方法∙sub 方法∙subn 方法match 方法>>> m = pattern.search('one12twothree34four') # 这里如果使用match 方法则不匹配>>> m< _sre.SRE_Match object at 0x10cc03ac0>>>> m.group()'12'>>> m = pattern.search('one12twothree34four', 10, 30) # 指定字符串区间>>> m< _sre.SRE_Match object at 0x10cc03b28>>>> m.group()'34'>>> m.span()(13, 15)再来看一个例子:# -*- coding: utf-8 -*-import re# 将正则表达式编译成Pattern 对象pattern = pile(r'\d+')# 使用search() 查找匹配的子串,不存在匹配的子串时将返回None# 这里使用match() 无法成功匹配m = pattern.search('hello 123456 789')if m:# 使用Match 获得分组信息print 'matching string:',m.group()print 'position:',m.span()执行结果:matching string: 123456position: (6, 12)findall 方法上面的match 和search 方法都是一次匹配,只要找到了一个匹配的结果就返回。
然而,在大多数时候,我们需要搜索整个字符串,获得所有匹配的结果。
findall 方法的使用形式如下:findall(string[, pos[, endpos]])其中,string 是待匹配的字符串,pos 和endpos 是可选参数,指定字符串的起始和终点位置,默认值分别是0 和len (字符串长度)。
findall 以列表形式返回全部能匹配的子串,如果没有匹配,则返回一个空列表。
看看例子:import repattern = pile(r'\d+') # 查找数字result1 = pattern.findall('hello 123456 789')result2 = pattern.findall('one1two2three3four4', 0, 10)print result1print result2执行结果:['123456', '789']['1', '2']finditer 方法finditer 方法的行为跟findall 的行为类似,也是搜索整个字符串,获得所有匹配的结果。
但它返回一个顺序访问每一个匹配结果(Match 对象)的迭代器。
看看例子:# -*- coding: utf-8 -*-import repattern = pile(r'\d+')result_iter1 = pattern.finditer('hello 123456 789')result_iter2 = pattern.finditer('one1two2three3four4', 0, 10)print type(result_iter1)print type(result_iter2)print 'result1...'for m1 in result_iter1: # m1 是Match 对象print 'matching string: {}, position: {}'.format(m1.group(), m1.span())print 'result2...'for m2 in result_iter2:print 'matching string: {}, position: {}'.format(m2.group(), m2.span())执行结果:<type 'callable-iterator'>< type 'callable-iterator'>result1...matching string: 123456, position: (6, 12)matching string: 789, position: (13, 16)result2...matching string: 1, position: (3, 4)matching string: 2, position: (7, 8)split 方法split 方法按照能够匹配的子串将字符串分割后返回列表,它的使用形式如下:split(string[, maxsplit])其中,maxsplit 用于指定最大分割次数,不指定将全部分割。
看看例子:import rep = pile(r'[\s\,\;]+')print p.split('a,b;; c d')执行结果:['a', 'b', 'c', 'd']sub 方法sub 方法用于替换。
它的使用形式如下:sub(repl, string[, count])其中,repl 可以是字符串也可以是一个函数:如果repl 是字符串,则会使用repl 去替换字符串每一个匹配的子串,并返回替换后的字符串,另外,repl 还可以使用\id的形式来引用分组,但不能使用编号0;如果repl 是函数,这个方法应当只接受一个参数(Match 对象),并返回一个字符串用于替换(返回的字符串中不能再引用分组)。
count 用于指定最多替换次数,不指定时全部替换。
看看例子:import rep = pile(r'(\w+) (\w+)')s = 'hello 123, hello 456'def func(m):return 'hi' + ' ' + m.group(2)print p.sub(r'hello world', s) # 使用'hello world' 替换'hello 123' 和'hello 456'print p.sub(r'\2 \1', s) # 引用分组print p.sub(func, s)print p.sub(func, s, 1) # 最多替换一次执行结果:hello world, hello world123 hello, 456 hellohi 123, hi 456hi 123, hello 456subn 方法subn 方法跟sub 方法的行为类似,也用于替换。
它的使用形式如下:subn(repl, string[, count])它返回一个元组:(sub(repl, string[, count]), 替换次数)元组有两个元素,第一个元素是使用sub 方法的结果,第二个元素返回原字符串被替换的次数。