本文目录一览:
python用正则表达式是时出现错误
这明显是类型错误,search方法的第二个参数是,字符串类型,你提供的不符合规定,所以要先给这个变量一个字符串。
希望能帮到你。。。
Python其实很简单 第十一章 正则表达式
正则表达式是一个特殊的字符序列,它用来检查一个字符串是否与某种模式匹配。正则表达式在编译程序中至关重要,但并不是每个人都需要特别深入的学习和掌握。在此,只介绍一些最基本的应用。
1、元字符
元字符是构成正则表达式的一些特殊字符。在正则表达式中,元字符被赋予了新的含义。
下面介绍一些常用的元字符及其含义:
. 匹配除换行符以外的任意字符。
w 匹配字母、数字、下划线或汉字。
W 匹配w所匹配的字符以外的字符。
s 匹配单个空白符(包括Tab键和换行符)。
S 匹配除s匹配的字符以外的字符。
d 匹配数字。
b 匹配单词的分界符,如:空格、标点符号或换行符。
^ 匹配字符串的开始
$ 匹配字符串的结束
2、限定符
限定符是在正则表达式中用来指定数量的字符。常用的限定符有:
? 匹配前面的字符0或1次。如:zo?m可以匹配zom和zm,但不能匹配 zoom
+ 匹配前面的字符1或n次。如:zo?m可以匹配zom和zoom,但不能匹配zm
* 匹配前面的字符0或n次。如:zo?m可以匹配zom、zoom和zm
{n} 匹配前面的字符n次。如:zo{2}m可以匹配zoom,但不能匹配zom和zm
{n,} 匹配前面的字符至少n次。如:zo{1,}m可以匹配zom和zoom,但不能匹配zm
{n,m} 匹配前面的字符至少n次,最多m次。如:zo{1,2}m可以匹配zom和zoom,但不能匹配zm
3、方括号”[ ]”的用途
方括号“[ ]”里可以列出某个字符范围。如:[aeiou]表示匹配任意一个元音字母,[zqsl]表示匹配姓氏“赵钱孙李”的拼音第一个字母。
4、排除字符
方括号”[ ]”中的“^”字符表示排除的意思,如:[^aeiou]表示匹配任意一个非元音字母的字符。
5、选择字符
字符“|”相当于“或”。如:(^d{3}[-]d{8})|(^d{4}[-]d{7})$可以匹配形如” - ”或“ - ”的电话号码格式。
6、转义字符
对于已经用于定义元字符和限定符的字符,需要加转义符“”来表示。
如:为了匹配形如“192.168.0.1”的IPv4地址(1~255.0~255.0~255.0~255),可以用这样的正则表达式:^(25[0-5]|2[0-4][0-9]|[0,1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]).(25[0-5]|2[0-4][0-9]|[0,1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0).(25[0-5]|2[0-4][0-9]|[0,1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0).(25[0-5]|2[0-4][0-9]|[0,1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$
这里解释一下第一段IP地址的规则,取值范围为1~255,可分解为以下情况:
250~255:25[0-5];
200~249:2[0-4][0-9];
100~199:[01]{1}[0-9]{2};
0~99: [0-9]{1}[1-9]
再加上”.”: .
其他三段地址和第一段相似。
7、“( )”可以用于分组
在正则表达式中,用“( )”括起来的部分是一个整体。
8、r(或R)的意义
在正则表达式中,为了保证模式字符串为原生字符串(没有经过加工处理的字符串),可以在模式字符串前加上一个字符‘r’或‘R’。例如:
# 这里用到对的re.match()方法接下来介绍
import re # 导入re模块
re.match('bPy[a-z]+','Python') # 表达式'bPy[a-z]+'不能匹配’Python’
re.match('bPy[a-z]+','Python') # 表达式'bPy[a-z]+'可以匹配’Python’
在上述代码中,原本要用作匹配单词开始或结束的元字符’b’在表达式中字符串中会被视为转义一个字符‘b’,为了转义’b’就不得不再加一个’’符号。
也可以采用下面的方法:
re.match(r'bPy[a-z]+','Python') #加字符’r’,可以保证原生字符串
9、match()方法
Match()方法 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match() 就返回 none。
语法格式:
re.match(pattern, string, [flags])
其中,pattern表示匹配的正则表达式;string是要匹配的字符串;flags表示标志位,用于控制正则表达式的匹配方式,如:re.I表示不区分大小写。
例:
import re #导入re模块
print(re.match('www', '').span()) #span()函数可以获取匹配的位置
print(re.match('org', ''))
输出结果为:
(0, 3) #在位置0到3(不包括3)匹配成功
None #从起始位置未能匹配成功
10、search()方法
search()方法用于在整个字符串中搜索第一个匹配的值,如果匹配成功,则返回Match对象,否则返回None。
语法格式:
re.search(pattern, string, [flags])
其中,pattern表示匹配的正则表达式;string是要匹配的字符串;flags表示标志位,用于控制正则表达式的匹配方式,如:re.I表示不区分大小写。
例如:
re.search(r'Pyw+','It's easy to use Python, but it's not easy to learn Python.')
可以看出,目标字符串“It's easy to use Python, but it's not easy to learn Python.”中一共有两个‘Python’,search()方法可以从字符串的起始位置开始查找到‘Python’,当找到第一个匹配值后就停止查找,返回位置信息。
match()和search()的比较
match()要求目标字符串的起始位置就能匹配,search()对目标字符串全段进行逐次匹配,只要首次匹配成功就停止匹配。
请看下例:
import re
print(re.match(r'Pyw+','It's easy to use Python, but it's not easy to learn Python.'))
输出结果:None
11、findall()方法
findall()方法用于在整个字符串中搜索所有匹配的值,如果匹配成功,则返回以匹配值为元素的列表,否则返回空列表。
语法格式:
re.findall(pattern, string[, flags])
其中,pattern表示匹配的正则表达式;string是要匹配的字符串;flags表示标志位,用于控制正则表达式的匹配方式,如:re.I表示不区分大小写。
例:
import re
print(re.findall(r'Pyw+','It's easy to use Python, but it's not easy to learn Python.'))
输出结果:['Python', 'Python']
可以看出,findall()的结果没有指出匹配的具体位置。
12、正则表达式的应用
字符串替换
这里要用到sub()方法。它的语法格式如下:
re.sub(pattern, repl, string [,count] [,flgs])
其中,pattern是模式字符串;repl是用于替换的字符串;string是原字符串;可选参数count为模式匹配后替换的最大次数,省缺表示替换所有的匹配;可选参数flags的意义与前面的方法的该参数一致。
例:
import re
str1='x=36.567 y=123.234'
str2=re.sub('.d+','',str1) #用空格代替小数点及其后的数字
print(str2)
输出结果:x=36 y=123
分隔字符串
这里要用到split()方法。它的返回值为一个列表,它的语法格式如下:
re.split(pattern, string [,maxsplit] [,flgs])
其中,pattern是模式字符串;string是原字符串;可选参数maxsplit为最大拆分次数,省缺表示拆分所有的匹配;可选参数flags的意义与前面的方法的该参数一致。
例:
import re
str='白日依山尽,黄河入海流。欲穷千里目,更上一层楼!'
re.split(r',|。|!',str) #按照“,”、“。”、“!”分隔字符串。
['白日依山尽', '黄河入海流', '欲穷千里目', '更上一层楼', '']
注意,返回值列表中多出了一个空字符。
python的正则表达式
1,正则表达式的一些内容
正则表达式主要是用来匹配文本中需要查找的内容,例如在一片文章中找出电话号码,就中国的来说11位纯数字(不说座机),则使用"\d{11}" 意味匹配数字11次,就能准确的查找出文本中的电话号码. 还有就是在编写网络爬虫的时候需要提取很多超链接再次进行爬取,使用正则表达式就很方便.直接匹配http开头就行,当然也可以使用beautifulsoup的select方法.
看下面的程序看看正则表达提取文本中的邮箱:
\w 匹配字母,数字,下划线
+ 匹配1次或者多次
re是正则表达式的工具包,工具包出错的话在anaconda的命令行输入"pip install re"安装,其他的工具包也是如此.
re.compile()中的r示意\不是转义字符,也就是保持后面字符串原样,findall返回一个列表.下面还有一个版本的程序略有不同.
compile的另一个参数re.IGONORECASE(忽略大小写),还可以是re.DORALL,多行模式,具体功能也是模糊不清,不过在使用通配符 . 匹配的时候加上re.DOTALL参数能够匹配换行.如果希望忽略大小写和多行模式都开启可以使用re.compile(r'....',re.IGNORECASE|re.DOTALL) .
表达式使用( ),对匹配到的内容分为3组 也就是(\w+)出现字母,数字,下划线一次或多次,这个分组就是下面使用match对象的grou()方法的时候的参数.不给参数和参数0都是得到整个匹配到的内容, 参数1得到第一个括号匹配到的内容,以此类推参数2和3,如果没有括号分组的话使用参数会出现错误.
search( )查找和正则式匹配的内容,只匹一次后面的那个找不到.返回一个match对象
\w 匹配字母,数字,下划线
\W 匹配字母,数字.下划线之外的所有字符
\d 匹配数字
\D 匹配非数字
\s 匹配空格,制表符,换行符
\S匹配除空格制表符,换行符之外的其他字符
[ .... ]定义自己的匹配,如[aeiouAEIOU ]匹配所有的元音字母,注意不是匹配单词.
{最少次数,最多次数},例如{3,9} 匹配3-9次,{ ,10}匹配0-10次. 默认为匹配最多次数(贪心匹配),非贪心模式在后面加上问号
? 可选 0次或者1次吧
+匹配1次或多次
*匹配0次或者多次
^ 判断开头 ^\d 如果待匹配串是数字开头则返回第一个数字
$判断结尾 \d$ 如果待匹配串是数字结尾则返回最后一个数字
. 通配符,匹配除换行之外的所有字符
\d{11} 匹配数字11次
. * 匹配所有字符除 换行
[a-zA-Z0-9._%+-] 小写和大写字母、数字、句点、下划线、百分号、加号或短横
[a-zA-Z]{2,4} 匹配字母 2 - 4次
学Python正则表达式,这一篇就够了
正则表达式是一个特殊的字符序列,可以帮助您使用模式中保留的专门语法来匹配或查找其他字符串或字符串集。 正则表达式在UNIX世界中被广泛使用。
注:很多开发人员觉得正则表达式比较难以理解,主要原因是缺少使用或不愿意在这上面花时间。
re模块在Python中提供对Perl类正则表达式的完全支持。如果在编译或使用正则表达式时发生错误,则re模块会引发异常re.error。
在这篇文章中,将介绍两个重要的功能,用来处理正则表达式。 然而,首先是一件小事:有各种各样的字符,这些字符在正则表达式中使用时会有特殊的意义。 为了在处理正则表达式时避免混淆,我们将使用:r'expression'原始字符串。
匹配单个字符的基本模式
编译标志可以修改正则表达式的某些方面。标志在re模块中有两个名称:一个很长的名称,如IGNORECASE,和一个简短的单字母形式,如。
1.match函数
此函数尝试将RE模式与可选标志的字符串进行匹配。
下面是函数的语法 :
这里是参数的描述 :
pattern : 这是要匹配的正则表达式。
string : 这是字符串,它将被搜索用于匹配字符串开头的模式。 |
flags : 可以使用按位OR(|)指定不同的标志。 这些是修饰符,如下表所列。
re.match函数在成功时返回匹配对象,失败时返回None。使用match(num)或groups()函数匹配对象来获取匹配的表达式。
示例
当执行上述代码时,会产生以下结果 :
2.search函数
此函数尝试将RE模式与可选标志的字符串进行匹配。
下面是这个函数的语法 :
这里是参数的描述 :
pattern : 这是要匹配的正则表达式。
string : 这是字符串,它将被搜索用于匹配字符串开头的模式。 |
flags : 可以使用按位OR(|)指定不同的标志。 这些是修饰符,如下表所列。
re.search函数在成功时返回匹配对象,否则返回None。使用match对象的group(num)或groups()函数来获取匹配的表达式。
示例
当执行上述代码时,会产生以下结果 :
3.匹配与搜索
Python提供基于正则表达式的两种不同的原始操作:match检查仅匹配字符串的开头,而search检查字符串中任何位置的匹配(这是Perl默认情况下的匹配)。
示例
当执行上述代码时,会产生以下结果 :
4.搜索和替换
使用正则表达式re模块中的最重要的之一是sub。
模块
此方法使用repl替换所有出现在RE模式的字符串,替换所有出现,除非提供max。此方法返回修改的字符串。
示例
当执行上述代码时,会产生以下结果 :
5.正则表达式修饰符:选项标志
正则表达式文字可能包含一个可选修饰符,用于控制匹配的各个方面。 修饰符被指定为可选标志。可以使用异或(|)提供多个修饰符,如前所示,可以由以下之一表示 :
6.正则表达模式
除了控制字符(+ ? . * ^ $ ( ) [ ] { } | ),所有字符都与其自身匹配。 可以通过使用反斜杠将其转换为控制字符。
7.正则表达式示例
字符常量
字符类
特殊字符类
重复匹配
非贪婪重复
这匹配最小的重复次数 :
用圆括号分组
反向引用
这与以前匹配的组再次匹配 :
备择方案
python|perl : 匹配“python”或“perl”
rub(y|le) : 匹配 “ruby” 或 “ruble”
Python(!+|?) : “Python”后跟一个或多个! 还是一个?
锚点
这需要指定匹配位置。
带括号的特殊语法
开课吧广场-人才学习交流平台-开课吧