正则表达式

正则表达式

一、正则表达式

正则表达式是一些特殊的符号组合在一起产生一些特殊含义,它能帮助我们方便的检查一个字符串中符合条件的数据值。
正则表达式线上测试网址:http://tool.chinaz.com/regex/

二、正则表达式之字符组

字符组就是一组字符,在正则表达式中,列出用[]之间所有的字符。简单的字符组比如[0-9]、[a-z]、[A-Z]等。
1.[0-9] 列出字符组中0到9之间的任意数字:
        字符组:"0123ab456cd789"
        正则表达式:[0-9]
        结果是:[0123456789]
2.[a-z] 列出字符组中a到z之间的任意字母
        字符组:"abcd1ef2ghi98z"
        正则表达式:[a-z]
        结果是:[abcdefghiz]
3.[A-Z] 列出字符组中A到Z之间的任意字母:
        字符组:"AB12CD3abEFZ"
        正则表达式:[A-Z]
        结果是:[ABCDEFZ]
ps:字符组在没有量词修饰的情况一次只会针对一个数据值。

三、正则表达式之特殊符

1 符号 含义
2 . 匹配除换行符外的任意字符
3 \w 匹配字母或数字或下划线
4 \W 匹配非字母或数字或下划线
5 \d 匹配数字
6 ^ 匹配字符串的开头
7 $ 匹配字符串的结尾
8 | 或;a|b:匹配a或b
9 () 给正则表达式分组,不影响正则表达式的匹配
10 [] 匹配字符组中的字符
11 [^] 匹配除了字符组中字符的所有字符

四、正则表达式之特殊符

编号 符号 量词
1 * 重复零次或更多次(默认尽可能多)
2 + 重复一次或更多次(默认尽可能多)
3 ? 重复零次或一次(默认一次)
4 重复n次
5 重复n次或更多次
6 重复n到m次

五.贪婪匹配与非贪婪匹配

1.贪婪匹配
        默认都是贪婪匹配
2.非贪婪模式
        只需要在量词后面加上"?"就可以让贪婪匹配变成非贪婪匹配
ps:以后我们在使用贪婪匹配或者非贪婪匹配的时候一般都是用“.*”或“.*?”,并且结束的标志有上述符号左右两边添加的表达式绝对。    

六、转义符

1.使用场景
        当要匹配没有没有换行含义的"\n"时需要取消它自带的换行含义
2.使用方式
        在正则表达式中取消转义使用 "\" (每个"\"只能取消一个字符的转义)
#斜杠与字母的组合有时候有特殊含义
\n     	   匹配的是换行符
\\n			匹配的是文本\n
\\\\n		匹配的是文本\\n
ps:如果是在python中使用 还可以在字符串前面加r取消转义

七、re模块

在python中想要使用正则表达式 re模块是其中选择之一。
re模块的常用方法:
序号 方法 用法
1 findall 列出字符串中模式的所有匹配项
2 finditer 将所有匹配到的项生成一个迭代器
3 search 在字符串中查找 。第一个匹配到的对象或者None(返回一个match对象)
4 match 在字符串的开始处匹配模式。 字符串开始没有则 None(返回一个match对象)
5 compile 提前设置好正则表达式后面可以直接调用
6 match.group(index) 将match对象拆分成字符串。不写index默认是0
7 match.groups() 将match对象转换成元组
import re  # 别忘了导包
res = re.findall('a','aa and bb and abc')
print(res) 
# ['a', 'a', 'a', 'a', 'a']
 
res = re.finditer('a','aa and bb and abc')
print(res)  # <callable_iterator object at 0x7f9c1aba5f70> 迭代器
 
res = re.search('a','aa and bb and abc')
print(res)        # <re.Match object; span=(0, 1), match='a'>
print(res.group()) # a
 
res = re.match('a','aa and bb and abc')
print(res)    # None
 
obj = re.compile('a')
print(re.findall(obj,'asdccecaawsa'))    # ['a', 'a', 'a', 'a']
print(re.findall(obj,'dsfsaaecacek'))    # ['a', 'a', 'a']

八、re模块之()用法

1.分组优先

import re
res = re.findall('and','aandbandcandabc')
print(res)    # ['and', 'and', 'and']
 
res = re.findall('a(n)d','aandbandcandabc')
print(res)    # ['n', 'n', 'n']
 
'''
findall针对分组的正则表达式匹配到的结果优先显示
可以用 (?:)取消优先显示'''
 
res = re.findall('a(?:n)d','aandbandcandabc')
print(res)    # ['and', 'and', 'and']

2.取别名

import res
res = re.search('a(?P<id>b)(?P<name>c)','abcabcabcabc')
print(res.group())    # abc
print(res.group(1))    # b
print(res.group('id'))    # b
print(res.group('name'))    # c

posted @ 2022-10-25 20:40  小王应该在学习!  阅读(233)  评论(0编辑  收藏  举报