Python爬虫学习(一:正则表达式)

正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,来筛选出符合这个规则的内容。

可以简单理解为:一个强大的搜索工具中,正则表达式就是你要搜索内容的条件表达式。

re.findall()函数

作用:遍历整个字符串,可以获取其中所有匹配的字符串,返回一个列表

一般用法:

re.findall(r'正则表达式','要匹配的文本')

栗子:

import retext = input()#********** Begin *********##1.匹配字符单词 Loveprint(re.findall(r'Love',text))#2.匹配以 w 开头的完整单词print(re.findall(r'\bw\w+',text))#3.查找三个字母长的单词(提示:可以使用{m,n}方式)print(re.findall(r'\b\w{3,3}\b',text))#********** End **********#
import re
text = input()
#********** Begin *********#
#1.匹配字符单词 Love
print(re.findall(r'Love',text))
#2.匹配以 w 开头的完整单词(如下是多种写法)
print(re.findall(r'\bw\w+',text))
print(re.findall(r'\bw\w*'))#*代表所以字符串
#3.查找三个字母长的单词(提示:可以使用{m,n}方式)
print(re.findall(r'\b\w{3}\b', text))
print(re.findall(r'\b\w{3,3}\b',text))
print(re.finall(r'\b\w\w\w\b', text))
#********** End **********#
['Love']
['we']
['are', 'too', 'yet', 'are']

一部分匹配规则
在这里插入图片描述
我们已经接触了re.findall()函数,现在我们继续学习 Python 正则模块中常用的功能函数吧。

compile()函数

编译正则表达式模式,返回一个对象的模式(可以把那些常用的正则表达式编译成正则表达式对象,这样可以提高一点效率)

格式:re.compile(pattern,flags=0)

pattern: 编译时用的表达式字符串(即正则表达式);
flags:(可选)编译标志位,用于修改正则表达式的匹配方式,如:是否区分大小写,多行匹配等。常用的flags有:

标志含义
re.S(DOTALL)使.匹配包括换行在内的所有字符
re.I(IGNORECASE)使匹配对大小写不敏感
re.L(LOCALE)做本地化识别(locale-aware)匹配,法语等
re.M(MULTILINE)多行匹配,影响^和$
re.X(VERBOSE)该标志通过给予更灵活的格式以便将正则表达式写得更易于理解
re.U根据Unicode字符集解析字符,这个标志影响\w,\W,\b,\B

match()函数

在字符串刚开始的位置匹配,在开头匹配到目的字符便返回,如果开头没有目的字符将匹配失败,返回None。

格式:re.match(pattern, string, flags=0)

注:match()函数返回的是一个match object对象,而match object对象有以下方法:

group():返回被正则匹配的字符串;
start():返回匹配开始的位置;
end():返回匹配结束的位置;
span():返回一个元组包含匹配 (开始,结束) 的位置;
groups():返回正则整体匹配的字符串,可以一次输入多个组号,对应组号匹配的字符串。

search()函数

re.search()函数会在字符串内查找模式匹配,只要找到第一个匹配然后返回。如果字符串没有匹配,则返回None。

格式:re.search(pattern, string, flags=0)

注:match()和search()比较类似,它们的区别在于match()只匹配字符串的开头,如果开头没有出现目的字符串,即使后面出现了也不会进行匹配;search()函数会在整个字符内匹配,只要找到一个目的字符串就返回。

例子:

import re
text = input()
#********** Begin *********#
#1.用compile方法,匹配所有含字母i的单词
rr = re.compile(r'\w*i\w*')
print(rr.findall(text))

#2.在字符串起始位置匹配字符The是否存在,并返回被正则匹配的字符串
print(re.match('The',text).group())

#3.在整个字符串查看字符is是否存在,并返回被正则匹配的字符串
print(re.search('is',text).group())

#********** End **********#)哈哈

finditer()函数;

搜索字符串,返回一个Match对象的迭代器(包含匹配的开始和结束的位置,如下图中的i所示)。找到正则匹配的所有子串,把它们作为一个迭代器返回。

格式:re.finditer(pattern, string, flags=0);

split()函数

按照能够匹配的子串,将string分割后返回列表。

格式:re.split(pattern, string);

可以使用re.split来分割字符串,如:re.split(r’\s+’, text)将字符串,按空格分割成一个单词列表。

sub()函数

使用re替换string中每一个匹配的子串后,返回替换后的字符串。

格式:re.sub(pattern, repl, string, count);

subn()函数

返回替换次数。

格式:subn(pattern, repl, string, count=0, flags=0);
解释:用A替换123中的1,结果为A23,repl就是指的A。

例子:

import re
text = input()
#********** Begin *********#
#1.匹配以t开头的所有单词并显示
itext = re.finditer(r'\bt\w+' ,text)
for i in itext:
    print(i.group())
#2.用空格分割句子
print(re.split( r'\s+', text))
#3.用‘-’代替句子中的空格 
print(re.sub( r' ', '-', text))
#4.用‘-’代替句子中的空格,并返回替换次数
print(re.subn(r' ' , '-', text))
#********** End **********#
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

I Am Rex

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值