创建模式
使用正则表达式时,首先需要学习的是如何创建模式。
接下来将对一些最常用的模式进行逐一介绍。
可以想到最简单的模式是一个简单的字符串。
pattern = r'times'
string = "It was the best of times, it was the worst of times."
print(len(re.findall(pattern,string)))
但这并不是很有用。为了帮助创建复杂的模式,正则表达式提供了特殊的字符/操作符。下面来逐个看看这些操作符。请等待gif加载。
1.[]操作符
这在第一个例子中使用过,可用于找到符合这些方括号中条件的一个字符。
[abc]-将查找文本中出现的所有a、b或c
[a-z]-将查找文本中出现的所有从a到z的字母
[a-z0–9A-Z]-将查找文本中出现的所有从A到Z的大写字母、从a到z的小写字母和从0到9的数字。
可以很容易地在Python中运行下列代码:
pattern = r'[a-zA-Z]'
string = "It was the best of times, it was the worst of times."
print(len(re.findall(pattern,string)))
除了.findall,正则表达式还有很多其他功能,稍后会涉及到。
2.点算符
点运算符(.) 用于匹配除换行符以外的任何字符。
运算符最大的优点是,它们可以结合使用。
例如,想在字符串中找出以小d或大写D开头,以字母e结尾,包含6个字母的子字符串。
3.一些元序列
在使用正则表达式时,一些模式会经常被用到。因此正则表达式为这些模式创建了一些快捷方式。最常用的快捷方式如下:
\w,匹配任何字母、数字或下划线。相当于[a-zA-Z0–9_]
\W,匹配除字母、数字或下划线以外的任何内容。
\d,匹配任何十进制数字。相当于[0–9]。
\D,匹配除十进制数字以外的任何数字。
4.加号和星形运算符
点算符只是用于获取任何字符的单个实例。如果想找出更多实例要怎么做呢?
加号+用于表示最左边字符的一个或多个实例。
星号*用于表示最左边字符的0个或多个实例。
例如,如果想找出所有以d开头,以e结尾的子字符串,d和e之间可以没有也可以有多个字符。我们可以用:d\w*e
如果想找出所有以d开头,以e结尾的子字符串,在d和e之间至少有一个字符,我们可以用:d\w+e
还可以使用更为通用的方法:用{}
\w{n} - 重复\w 正好n次。
\w{n,} - 重复\w至少n次,或者更多次。
\w{n1, n2} - 重复 \w 至少n1次,但不超过n2次。
5.^插入符号和美元符号。
^插入符号匹配字符串的开始,而$美元符号则匹配字符串的结尾。
6.单词边界
这是一个重要的概念。
有没有注意到,在上面的例子中,总是匹配子字符串,而不是匹配单词?
如果想找出所有以d开头的单词呢?
可以使用d\w*模式吗?下面用网络工具来试一试吧。