Python正则表达式返回首次匹配到的字符及查询的健壮性

re.findall(pattern,string)会搜索所有匹配的字符,返回的是一个列表,获取首个匹配需要re.findall(pattern,string)[0]访问, 但是如果findall没匹配成功则返回空列表,这时用列表下标去访问元素时就会报IndexError: list index out of range。

如:

>>>re.findall(‘abc‘,‘abd‘)
[]
>>>re.findall(‘abc‘,‘abd‘)[0]
Traceback (most recent call last):
File "<input>", line 1, in <module>
IndexError: list index out of range

我们可以在pattern后面加一个"|$"来生成一个默认的‘‘元素:

>>>re.findall(‘abc|$‘,‘abd‘)[0]
‘‘
>>>re.findall(‘abc|$‘,‘abcdef‘) #注意,无论匹配到与否,都会附加上一个‘‘元素
[‘abc‘, ‘‘]

同样适用于re.search

>>> re.search(‘\d+|$‘, ‘aa33bbb44‘).group()
‘33‘
>>> re.search(‘\d+|$‘, ‘aazzzbbb‘).group()
‘‘

如果不加|$的话:

>>>re.search(‘\d+‘, ‘aazzzbbb‘).group() #search没匹配上,再用.group()就会报错
Traceback (most recent call last):
File "<input>", line 1, in <module>
AttributeError: ‘NoneType‘ object has no attribute ‘group‘

参考:https://stackoverflow.com/questions/38579725/return-string-with-first-match-regex

原文地址:https://www.cnblogs.com/huahuayu/p/8253882.html

时间: 2024-10-01 00:37:56

Python正则表达式返回首次匹配到的字符及查询的健壮性的相关文章

40 python 正则表达式 match方法匹配字符串 使用search函数在一个字符串中查找子字

第一课: 使用match方法匹配字符串 # 正则表达式:使用match方法匹配字符串 ''' 正则表达式:是用来处理文本的,将一组类似的字符串进行抽象,形成的文本模式字符串 windows dir *.txt file1.txt file2.txt abc.txt test.doc a-file1.txt-b linux/mac ls 主要是学会正则表达式的5方面的方法 1. match:检测字符串是否匹配正则表达式 2. search:在一个长的字符串中搜索匹配正则表达式的子字符串 3. fi

python正则表达式3-模式匹配

re.S,使 '.'  匹配换行在内的所有字符 >>> pattern=r'ghostwu.com' >>> import re >>> re.findall( pattern, 'ghostwuacom' ) ['ghostwuacom'] >>> re.findall( pattern, 'ghostwubcom' ) ['ghostwubcom'] >>> re.findall( pattern, 'ghost

正则表达式获取首次匹配项

(?is)M\[0\].*?\[0\]M SELECT M[0]  ABCD12345EFG[0]M AS ''CHINA",M[0]MQWERTM[0]M  ,M[0]MQWSADERTM[0]M 需求:取出被M[0]M包含的数据,内容可能会换行,取出3个匹配项目结果等于M[0]  ABCD12345EFG[0]M M[0]MQWERTM[0]M M[0]MQWSADERTM[0]M

Python正则表达式使用过程中的小细节

今天用Python写了个简单的爬虫程序,抓取虎扑篮球(nba.hupu.com)的首页内容,代码如下: 1 #coding:gb2312 2 import urllib2, re 3 webpage = urllib2.urlopen('http://nba.hupu.com') 4 text = webpage.read() 5 m = re.search('<a href=(.*) (.*)?>彩票</a>', text) 6 print m.group(1) 按照预想应该输出

python 正则表达式口诀

正则其实也势利,削尖头来把钱揣: (指开始符号^和结尾符号$)   特殊符号认不了,弄个倒杠来引路: (指\. \*等特殊符号)   倒杠后面跟小w, 数字字母来表示: (\w跟数字字母;\d跟数字)   倒杠后面跟小d, 只有数字来表示:   倒杠后面跟小a, 报警符号嘀一声:   倒杠后面跟小b, 单词分界或退格:   倒杠后面跟小t, 制表符号很明了:   倒杠后面跟小r, 回车符号知道了:   倒杠后面跟小s, 空格符号很重要:   小写跟罢跟大写,多得实在不得了:   倒杠后面跟大W,

Python正则表达式(1) --匹配单个字符

re模块操作 在python 中需要通过正则表达式对字符串进行匹配的时候,可以使用一个模块,名字为re,使用方法如下: # 导入re模块 import re # 使用match方法进行匹配操作 result = re.match(正则表达式,要匹配的字符串) # 如果上一步匹配到数据的话,可以使用group方法来提取数据 result.group() re模块示例(匹配以abc开头的语句) import re result = re.match("abc","abc.cn&q

1.3 正则表达式和python语言-1.3.7 匹配任何单个字符

1.3.7 匹配任何单个字符 (2018-05-08) 点号(.)不能匹配一个换行符\n 或者非字符,也就是说,一个空字符串 搜索一个真正的句点(小数点), 而我们通过使用一个反斜线对句点的功能进行转义: import re #点号(.)不能匹配一个换行符\n 或者非字符,也就是说,一个空字符串. anyend = '.end' m = re.match(anyend, 'bend') # 点号匹配 'b' if m is not None: print("match success"

python 正则表达式 贪婪模式的简介和匹配时的几种模式

看到一篇文章,关于python正则的,http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html 贪婪模式与非贪婪模式: 正则表达式通常用于在文本中查找匹配的字符串.Python里数量词默认是贪婪的(在少数语言里也可能是默认非贪婪),总是尝试匹配尽可能多的字符:非贪婪的则相反,总是尝试匹配尽可能少的字符.例如:正则表达式"ab*"如果用于查找"abbbc",将找到"abbb".而如果使用

Python: 正则表达式匹配反斜杠 &quot;\&quot;

Python正则表达式匹配反斜杠 "\" eg: >>>a='w\w\w' 'w\\w\\w' #  打印出来的 "\\" 被转义成 一个反斜杠 "\" 如果需要匹配字符串a,需要匹配一个反斜杠 "\" >>>re.split(r'\\',a) ['w','w','w',] 先对字符串转义,再进行正则表达式转义 由于原始字符串中所有字符直接按照字面意思来使用,不转义特殊字符,故不做字符串转义