正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,来筛选出符合这个规则的内容。
可以简单理解为:一个强大的搜索工具中,正则表达式就是你要搜索内容的条件表达式。
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 **********#