Python从0到100:数据提取之正则
在Python中,我们可以使用正则表达式(regex)来提取或者说查找字符串中的特定模式。Python 自1.5版本起,增加了re模块,用于提供正则表达式的支持。
以下是一些常用的正则表达式函数:
- re.match()
match() 函数试图从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match() 函数将不返回结果。
- re.search()
search() 函数会扫描整个字符串并返回第一个成功的匹配。
- re.findall()
findall() 函数扫描整个字符串并返回所有成功的匹配。
- re.sub()
sub() 函数用于替换字符串中的匹配项。
- re.split()
split() 函数可以根据模式的匹配项来分割字符串。
下面是一些使用正则表达式的例子:
例1:使用match()函数
import re
text = "123abc456"
matchObj = re.match(r'\d+', text)
if matchObj:
print("matchObj.group(): ", matchObj.group())
else:
print("No match!!")
例2:使用search()函数
import re
text = "123abc456"
searchObj = re.search(r'\d+', text)
if searchObj:
print("searchObj.group(): ", searchObj.group())
else:
print("No match!!")
例3:使用findall()函数
import re
text = "123abc456"
matches = re.findall(r'\d+', text)
print(matches) # Output: ['123', '456']
例4:使用sub()函数
import re
text = "123abc456"
print(re.sub(r'\d+', 'ABC', text)) # Output: 'ABCabcABC'
例5:使用split()函数
import re
text = "123abc456def789"
print(re.split(r'\d+', text)) # Output: ['', 'abc', 'def', '']
正则表达式是一种功能强大的工具,可以用于复杂的文本处理任务。然而,正则表达式的复杂性也使得它比较难学习。在编写正则表达式时,需要注意转义字符(如'.'、'*'、'?'等)在Python字符串中的表示和在正则表达式中的表示可能会有所不同。
例如,在Python字符串中,你需要使用''来转义,而在正则表达式中,你通常不需要转义。在Python中,你可以使用原始字符串(r'...')来避免这种转义。
例如,下面两种方式是等价的:
re.findall("\\d+", "123 456 789")
re.findall(r"\d+", "123 456 789")
在第一种方式中,"\d"实际上是在Python字符串中表示'\d',然后正则表达式引擎再解释'\d'为正则表达式中的数字字符。在第二种方式中,"\d"是在原始字符串中,直接传递给正则表达式引擎,被解释为正则表达式中的数字字符。
在实际应用中,正则表达式可以用于提取邮箱
评论已关闭