Python

python正则表达式必知必会

2019-06-02  本文已影响105人  不分享的知识毫无意义

  正则是做数据分析和挖掘必须要会的一种方法,会了它很多问题其实就可以高效的解决了。说一个最常用的应用场景,在文本识别中,使用正则可以快速识别出类似于qq号、广告、联系方式等内容,很简单就可以为网站文本过滤提供支持。

1.正则表达式基础

  正则表达式有一套自己的语言系统,像人类语言一样,有几个关键字构成了它的基础语法。整理起来就是下面这几个:

2.正则表达式常用元字符

  其实第一部分讲的也是元字符,之所以把它们拿出来说是因为太重要了,如果对正则要求不咋严格的话,第一部分就足够解决大部分问题了。下面的我就简单介绍。

3.python中自带的处理正则表达式的包—re

  开始之前,先说一下python对字符串的默认操作符,首先是字符串前加r,表示不转义,r"i am . frank",这个点就是代表点自身,还有一个是字符串前加u,代表采用unicode编码,对于中文的正则用的比较多。接下来说re中的函数。

import re
regx1 = re.compile('\w{0,8}')
result = re.match(regx1,'itcast.cn')
#当然也可以用result = re.match('\w{0,8}','itcast.cn')
print(result)
-- 输出,注意它的输出是一个python对象,可以当逻辑判断使用
<re.Match object; span=(0, 6), match='itcast'>
regx1 = re.compile('\d+')
result = re.search(regx1,'abc 123itcast.cn522abc')
print(result)
-- 输出
<re.Match object; span=(4, 7), match='123'>
regx2 = re.compile('[t,w]h')
result = re.findall(regx2,'https://docs.python.org/3/whatsnew/3.6.html')
print(result)
--输出
['th', 'wh']

  这个函数有个坑我必须要说一下,就是如果有括号的话,那么括号里的内容都会匹配一遍。

regx3 = re.compile(r'(.*([w]h).*)')
result = re.findall(regx3,'https://docs.python.org/3/whatsnew/3.6.html')
print(result)
--输出
[('https://docs.python.org/3/whatsnew/3.6.html', 'wh')]

  咋办呢,用第一部分的?:解决。

regx4 = re.compile(r'(.*(?:[w]h).*)')
result = re.findall(regx4,'https://docs.python.org/3/whatsnew/3.6.html')
print(result)
--输出
['https://docs.python.org/3/whatsnew/3.6.html']
regx4 = re.compile(r'\d+')
print(regx4.split('one1two2three3four4'))
-- 输出
['one', 'two', 'three', 'four', '']
regx5 =re.compile( "\d+")
result = re.sub(regx5, '_add111', 'hello 123 world 456 nihao 789',2)
print(result)
--输出
hello _add111 world _add111 nihao 789

  还有一些高阶函数,如果我用上了,我会继续补充的,目前笔者工作中还是没有遇到的。

4.3.python正则表达式进阶—regex

  这个包不是python自带的,需要pip install安装,安装很简单。它提供了很多附加的正则表达式功能。

import regex
regex.findall('(?:hello){s<=2}', 'hallo')
--输出
['hallo']
regex.search(r'(?(DEFINE)(?P<quant>\d+)(?P<item>\w+))(?&quant) (?&item)', '5 elephants')
-- 输出
<regex.Match object; span=(0, 11), match='5 elephants'>

  此后可以用(?&quant)表示\d+,(?&item)表示\w+,特别适用于子句复杂的情况。
  更多功能待探索后补充。

上一篇 下一篇

猜你喜欢

热点阅读