标签:字符 匹配 正则表达式 res re print
正则表达式
一、正则表达式
正则表达式是一些特殊的符号组合在一起产生一些特殊含义,它能帮助我们方便的检查一个字符串中符合条件的数据值。
正则表达式线上测试网址: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} |
重复n次 |
5 |
{n,} |
重复n次或更多次 |
6 |
{n,m} |
重复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
标签:字符,
匹配,
正则表达式,
res,
re,
print
From: https://www.cnblogs.com/zx0524/p/16826257.html