目录
- 一、判断字符串中是否含有字串
- 二、正则表达式
- (一)基本内容
- 1.正则表达式修饰符——可选标志
- 2.正则表达式模式
- (二)常见表达式函数
一、判断字符串中是否含有字串
1. in,not in
判断字符串中是否含有某些关键词,方法比较多例如分词后对词向量和关键词进行==匹配,但这种方法以来分词的准确性,不太推荐;其次使用成员运算符in,not in可以较好的判断字符串中是否包含某关键词,即特定字串
a = \’这个暑假我读了红楼梦和三国演义\’
b= [\’三国演义\’,\’水浒传\’,\’西游记\’,\’红楼梦\’]
n = 0
for i in b:
if i in a:
n += 1
print(f\’四大名著暑假读了{n}本\’)
这种遍历算法虽然可以成功得到想要的结果,但是当数据量很大的时候,程序执行效率将会很低。正则匹配作为专业的查找工具,在判断字符串中含有特定字串的事情上可以大大提高工作效率。
2.正则匹配re.findall
import re
def is_in(fullstr,substr):
if re.findall(substr,fullstr):
return 1
else:
return 0
a = \’这个暑假我读了红楼梦和三国演义\’
b= [\’三国演义\’,\’水浒传\’,\’西游记\’,\’红楼梦\’]
n = 0
for i in b:
n = is_in(a,i)
n += 1
print(f\’四大名著暑假读了{n}本\’)
findall:返回string中所有与pattern匹配的全部字符串,返回形式为数组
re.findall(pattern, string, flags=0)
示例如下:
line = []
n = 0
for i in b:
num = is_in(a,i)
n += num
res = re.findall(i,a)
line = line + res
print(f\’四大名著暑假读了{n}本\’)
print(f\’分别是{line}\’)
\’\’\’
res = re.findall(i,a) re.findall返回值是一个列表
out:
四大名著暑假读了2本
分别是[\’三国演义\’, \’红楼梦\’]
\’\’\’
正则的功能十分强大,上述使用的只是其中一个很小的功能。下面继续对正则的强大功能进行学习
二、正则表达式
(一)基本内容
1.正则表达式修饰符——可选标志
正则表达式可以包含一些可选标志修饰符来控制匹配的模式。修饰符被指定为一个可选的标志。多个标志可以通过按位 OR(|) 它们来指定。如 re.I | re.M 被设置成 I 和 M 标志
2.正则表达式模式
模式字符串使用特殊的语法来表示一个正则表达式:(1)字母和数字表示他们自身。一个正则表达式模式中的字母和数字匹配同样的字符串。(2)多数字母和数字前加一个反斜杠时会拥有不同的含义,例如\\n 表示换行。(3)标点符号只有被转义时才匹配自身,否则它们表示特殊的含义。(4)反斜杠本身需要使用反斜杠转义。(5)由于正则表达式通常都包含反斜杠,所以最好使用原始字符串来表示它们。模式元素(如 r'\\t',等价于 '\\\\t')匹配相应的特殊字符。
下表列出了正则表达式模式语法中的特殊元素。如果使用模式的同时提供了可选的标志参数,某些模式元素的含义会改变。
(二)常见表达式函数
正则表达式是一个特殊的字符序列,可以方便的检查一个字符串是否与某种模式匹配,python自带的re模块使 Python 语言拥有全部的正则表达式功能python常用的正则表达式函数如下:
1. re.match
re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match() 就返回 none
re.match(pattern, string, flags=0)
匹配成功 re.match 方法返回一个匹配的对象,否则返回 None可以使用 group(num) 或 groups() 匹配对象函数来获取匹配表达式
0:表示正则表达式中符合条件的字符串。1:表示正则表达式中符合条件的字符串中的第一个() 中的字符串。2:表示正则表达式中符合条件的字符串中的第二个() 中的字符串。以此类推…
import re
fullstr = \’name:alice,result:89\’
result = re.match(\’name:(\\w+),result:(\\d+)\’, fullstr)
print(result)
print(result.group(0))
print(result.group(1))
print(result.group(2))
print(result.group())
结果:
out1: <re.Match object; span=(0, 20), match=‘name:alice,result:89’>out2: name:alice,result:89out3: aliceout4: 89out5: name:alice,result:89
从结果可以看出,re.match()方法返回一个匹配的对象,而不是匹配的内容。通过调用span()可以获得匹配结果的位置。而如果从起始位置开始没有匹配成功,即便其他部分包含需要匹配的内容,re.match()也会返回None可以使用group()来提取每组匹配到的字符串。group()会返回一个包含所有小组字符串的元组,从 0 到 所含的小组号
注意:如果在运用正则表达式做匹配的过程中没有匹配到元素,之后又调用了group(),会报错:AttributeError: 'NoneType' object has no attribute 'group'如果出现这种报错,可以将match改成search()就可以避开这类问题了。search函数是先扫描全部的代码块,再进行提取的
2.re.search
re.search会匹配整个字符串,并返回第一个成功的匹配。如果匹配失败,则返回None
re.search(pattern, string, flags=0)
参数同re.match
示例:
import re
fullstr = \’class:1班,name:alice,result:89\’
result = re.match(\’name:(\\w+),result:(\\d+)\’, fullstr)
print(result)
print(result.group(0))
out1: Noneout2: AttributeError: ‘NoneType’ object has no attribute ‘group’原因:match在起始位置匹配,如果不是起始位置匹配成功的话,match() 就返回 none
尝试search
import re
fullstr = \’class:1班,name:alice,result:89\’
result = re.search(\’name:(\\w+),result:(\\d+)\’, fullstr)
print(result)
print(result.group(0))
print(result.group(1))
print(result.group(2))
print(result.group())
out1: <re.Match object; span=(9, 29), match=‘name:alice,result:89’>out2: name:alice,result:89out3: aliceout4: 89out5: name:alice,result:89
3. re.sub
该函数主要用于替换字符串中的匹配项
re.sub(pattern, repl, string, count=0, flags=0)
示例如下:
#修改分数
fullstr = \’name:alice,result:89\’
res1 = re.sub(r\’\\d+\’,\’90\’,fullstr)
print(res1)
out: name:alice,result:90
repl可以为一个函数。如下:
#修改分数
def change(matched):
value = int(matched.group(\’value\’))
return str(value + 1)
fullstr = \’name:alice,result:89\’
res1 = re.sub(\'(?P<value>\\d+)\’,change,fullstr)
print(res1)
out: name:alice,result:90
4.re.compile
compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用re 模块的一般使用步骤是:
1.使用 compile 函数将正则表达式的字符串形式编译为一个 Pattern 对象2.通过 Pattern 对象提供的一系列方法对文本进行匹配查找,获得匹配结果(一个 Match 对象)3.最后使用 Match 对象提供的属性和方法获得信息,根据需要进行其他的操作里是引用
re.compile(pattern, flags)
compile返回的是一个匹配对象,它单独使用就没有任何意义,需要和findall(), search(), match()搭配使用
5.re.findall
在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果有多个匹配模式,则返回元组列表,如果没有找到匹配的,则返回空列表注: match 和 search 是匹配一次 findall 匹配所有
6.re.split
re.split(pattern, string[, maxsplit=0, flags=0])
到此这篇关于python使用正则匹配判断字符串中含有某些特定子串 及 正则表达式详解的文章就介绍到这了,更多相关python正则表达式判断字符串中是否含有字串内容请搜索悠久资源网以前的文章或继续浏览下面的相关文章希望大家以后多多支持悠久资源网!
您可能感兴趣的文章:
- Python正则表达式匹配字符串中的数字
- python 正则表达式获取字符串中所有的日期和时间
- Python字符串和正则表达式中的反斜杠(\’\’\\\’\’)问题详解
- Python 正则表达式匹配数字及字符串中的纯数字
- python正则表达式从字符串中提取数字的思路详解
- python正则表达式匹配不包含某几个字符的字符串方法
- Python使用正则表达式分割字符串的实现方法
- python字符串中匹配数字的正则表达式