摘要:
re.compile()的使用介绍与re.search()使用的介绍,获取字符串中匹配
例子:
2020-05-20 统计5月份我司在美国泳装的销售额共计360000美元,其中款式为SJ2580的泳装销售量最高。
这句话可能没什么逻辑,但是作为例子来认识以下正则表达式吧
1、re.compile()生成正则表达式对象
通过re.compile()可以将正则表达式转换成正则表达式对象,这里要区分以下正则表达式与正则表达式对象,正则表达式:是我们需要传入re.compile的参数,正则表达式对象:是re.compile的返回,通过返回的正则表达式对象,可以使用不同的方法来匹配文本
实例如下:
text = "2020-05-20 统计5月份我司在美国泳装的销售额共计360000美元,其中款式为SJ2580的泳装销售量最高。"
pattern = re.compile(r"\d{4}-\d{2}-\d{2}")
这里的\d用来指代数字,花括号{}中的数字代表出现的次数,连在以前就是数字出现的次数,中间用横杆-连接,整体的意思就是:4个数字-2个数字-2个数字对比文本text哪个符合这个规律,对就是年月日:2020-05-20,所以这段代码的目的就是生成年月日的正则表达式对象,而"\d{4}-\d{2}-\d{2}"就是正则表达式。
ps:r"\d{4}-\d{2}-\d{2}" 这里的r 代表的是原始字符串的意思,使得'\'不再代表转义字符。
2、寻找正则表达式的匹配search()方法
通过上述的compile()生成的Regex对象即(正则表达式对象),可以通过调用search的方法来查找符合该正则表达式的所有匹配,其中search()就是其中之一的方法。
search()是扫描整个字符串并返回第一个与表达式相匹配的结果,如果没有找到就会返回None。
如何使用?
还是采用上面的例子,首先来列一下我们需要明确的一些点:
a:需要匹配的字符串是什么?
b:你需要匹配的字符串具有什么样的结构?这就影响你需要编辑什么样的正则表达式。
c:根据正则表达式生成正则表达式对象
d:根据正则表达式匹配字符串输出匹配结果
接下来我们来看代码:
# a:明确需要匹配的字符串
text = "2020-05-20 统计5月份我司在美国泳装的销售额共计360000美元,其中款式为SJ2580的泳装销售量最高。"
# b、c 需要查找的字符串类型是年-月-日,根据字符串类型编写正则表达式,compile()生成正则表达式
pattern = re.compile(r"\d{4}-\d{2}-\d{2}")
# d 查找匹配的结果并输出 search()
res = pattern.search(text)
print(res)
pattern是生成的正则表达式对象,用正则表达式对象.search()的方法来实现匹配,search传入需要匹配的字符串作为参数,返回的res是匹配的Match对象,结果如下:
<re.Match object; span=(0, 10), match='2020-05-20'>
结果中的match就是匹配到的结果,而span代表的是他出现再字符穿的起始位置与结束位置;
如果没有匹配到输出结果就是None;
如果需要输出完整的匹配结果,可以使用res.group()的方法输出,采用group()的输出代码与结果如下图所示:
# a:明确需要匹配的字符串
text = " 2020-05-20统计5月份我司在美国泳装的销售额共计360000美元,其中款式为SJ2580的泳装销售量最高。"
# b、c 需要查找的字符串类型是年-月-日,根据字符串类型编写正则表达式,compile()生成正则表达式
pattern = re.compile(r"\d{4}-\d{2}-\d{2}")
# d 查找匹配的结果并输出 search()
res = pattern.search(text)
print(res.group())
输出结果:2020-05-20
具体有关group的使用会在后面较为详细的解释其用法。