|
我们在做数据清洗的时候,有时候会遇到将一堆文本中提取我们需要的内容,最常见的是,从一大段文本中提取出数字、电话号码、日期、网址等。而在Python中,正则表达式re,则可以满足我们从文本中提取数字、电话号码和日期等需要。以下是一些示例代码:1.从文本中提取数字1.1.使用re.findall提取数字从文本中提取数字,可以用findall来查找:importretext="Thepriceis99.99andthequantityis100."numbers=re.findall(r'\d+',text)#提取所有数字float_numbers=re.findall(r'\d+\.\d+',text)#提取所有浮点数print('只提取所有整数的方法是:',numbers)#输出:只提取整数的方法是:['99','99','100']print('只提取所有浮点数的方法是:',float_numbers)#输出:只提取浮点数的方法是:['99.99']123456789101.2.使用re.compile提取数字如果我们只是单纯使用re.findall来提取数字,整数和浮点数会分开来提取,在处理数字的时候就会很不方便。因此,我们在上面的基础上,结合正则表达式分组re.compile()来查找,编译后的正则表达式对象可以使用groupindex属性来访问分组的名称和索引。可以提高正则表达式的匹配效率。importretext="Thepriceis99.99andthequantityis100"pattern=re.compile(r'(?\d{4})-(?P\d{2})-(?P\d{2})')pattern.findall(text)#[('2023','03','05')]12344.从文本中提取网址我们有时候需要整理网址的时候,会遇到一些不完整的网址,需要做拼接,或者再处理;如这个例子:打算把【…/Company_View/Default/f/f99fa474-d1f1-484e-8953-006bf6dfaec0.shtml】整理成【https://Company_View/Default/f/f99fa474-d1f1-484e-8953-006bf6dfaec0.com】经过观察,我们需要把前面的多余的符号和后缀去掉,然后拼接需要的https、com就好,一下是处理的过程:importrestr1='../Company_View/Default/4.shtml'new_net='https://'+str1[str1.find('/')+1:str1.rindex(".")]+'.com'print(new_net)#'https://Company_View/Default/4.com'123456这里使用了,字符串的的find和rindex的方法。我们先索引第一个“/”的位置,从这个位置到最后一个“.”的位置,用rindex是从右边开始数起来。总结:正则表达式很强大,但也需要仔细地编写以避免错误匹配哦!附录:如果要给电话号码做隐私处理,加一个遮罩效果:#从4以后的内容遮罩,长度为5text='123456789101114'obj_start=4#遮罩起始位置obj=5#遮罩长度new_text=text[0bj_start]+obj*'*'+text[obj_start+obj:]print(new_text)#1234*****1011141234567
|
|