Python从入门到入土-正则表达式

正则表达式

对脚本语言来说,处理字符串是必须的,那么我们也必须要来了解一下正则表达式了

以下是常用的匹配规则:

模式描述
\w匹配字母数字及下划线
\W匹配非字母数字及下划线
\s匹配任意空白字符,等价于 [\t\n\r\f].
\S匹配任意非空字符
\d匹配任意数字,等价于 [0-9]
\D匹配任意非数字
\A匹配字符串开始
\Z匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串
\z匹配字符串结束
\G匹配最后匹配完成的位置
\n匹配一个换行符
\t匹配一个制表符
^匹配字符串的开头
$匹配字符串的末尾。
.匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符。
[...]用来表示一组字符,单独列出:[amk] 匹配 'a','m'或'k'
[^...]不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。
*匹配0个或多个的表达式。
+匹配1个或多个的表达式。
?匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式
{n}精确匹配n个前面表达式。
{n, m}匹配 n 到 m 次由前面的正则表达式定义的片段,贪婪方式
a|b匹配a或b
( )匹配括号内的表达式,也表示一个组

看晕了是不是,别着急,我们来找个实例练习一下。

开源中国提供的正则表达式测试工具http://tool.oschina.net/regex/

打开之后我们可以输入待匹配的文本,然后选择常用的正则表达式

例如我们在这里输入待匹配的文本如下:

my phone wwwicloud.com.  my website is http://cuiqingcai.com. zzz://ewfewfu.cn. ertyufghj www.dfvffew.com rtftcftcft https://baidu.com

譬如我们要匹配网址,思路是把以www.或者http:或者https:开头的字符串截取出来:
www\.[^\s]*|http:[^\s]*|https:[^\s]*
这里要注意一下因为"."需要转义"\.",不然会被理解成匹配任意字符。

Python中使用

Python的re库提供了整个正则表达式的实现,利用re库我们就可以在Python中使用正则表达式来,在Python中写正则表达式几乎都是用的这个库。

下面我们就来了解下它的用法。

re.match()方法

在这里首先介绍第一个常用的匹配方法,match()方法,我们向这个方法传入要匹配的字符串以及正则表达式,就可以来检测这个正则表达式是否匹配字符串了。

match()方法会尝试从字符串的起始位置匹配正则表达式,如果匹配,就返回匹配成功的结果,如果不匹配,那就返回None。

扫描二维码关注公众号,回复: 1097151 查看本文章

函数语法:

re.match(pattern, string, flags=0)

re.search()方法

re.search 扫描整个字符串并返回第一个成功的匹配。

函数语法:

re.search(pattern, string, flags=0)

re.findall()方法

在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。

注意: match 和 search 是匹配一次 findall 匹配所有。

语法格式为:

findall(string[, pos[, endpos]])

我们来看个例子:
import re
line = "my phone is http://cuiqingcai.com. zzz://ewfewfu.cn. ertyufghj www.dfvffew.com rtftcftcft https://baidu.com"
matchURL = re.findall(r'www\.[^\s]*|http:[^\s]*|https:[^\s]*', line)

print(matchURL)

看执行结果:
['http://cuiqingcai.com.', 'www.dfvffew.com', 'https://baidu.com']
 

猜你喜欢

转载自www.cnblogs.com/init-life/p/9106483.html
今日推荐