match方法
import re
# match 第一个传入规则,第二个传入字符串
# 从开头进行匹配,如果没有进行匹配进行返回none
# 当输入获取数据时,需要调用group方法
while True:
number = input('请输入一个数字\n')
ret = r'[01]?\d{1,2}'
result = re.match(ret,number)
print(result.group())
输出结果:
我输入的:99
匹配到的:99
请输入一个数字
字符功能
字符 | 功能 | 例子 | 结果 |
---|---|---|---|
. | 表示任意字符不包括\n | re.match(r'.','abc') | a |
[] | 表示括号里面的任意字符 | print(re.match(r'[abc]','a').group()) | a |
\d | 表示匹配数字 | print(re.match(r'\d','1').group()) | 1 |
\D | 表示非数字 | print(re.match(r'\D','我').group()) | 我 |
\s | 表示空白 | print(re.match(r'\s',' ').group()) | |
\S | 表示非空白 | print(re.match(r'\S','我').group()) | 我 |
\w | 表示单词 包括(a-z A-Z 0-9 _) | print(re.match(r'\w','_').group()) | _ |
\W | 表示非单词 | print(re.match(r'\w','我').group()) | 我 |
[^-] | 表示任意数字 | print(re.match(r'[^-]','1123').group()) | 1 |
数量
字符 | 功能 | 例子 | 结果 |
---|---|---|---|
* | 表示前面的字符出现零次或者任意次(可有可无) | print(re.match(r'.*','abbcdsd').group()) | abbcdsd |
? | 表示前面的出现一次或者零次 | print(re.match(r'.?','a').group()) | a |
+ | 表示前面的出现一次或者多次 | print(re.match(r'.+','adddddd').group()) | adddddd |
{m} | 表示前面的出现m次 | print(re.match(r'\d{2}','12').group()) | 12 |
{,m} | 表示前面最多出现m次 | print(re.match(r'\d{,2}','12').group()) | 12 |
{m,n} | 表示前面的最少出现m次最多出现n次 | print(re.match(r'\d{2,3}','122').group()) | 122 |
边界
字符 | 功能 | 例子 | 结果 |
---|---|---|---|
^ | 匹配字符串开头 | print(re.match(r'^你好.*','你好,我是某某某').group()) | 你好,我是某某某 |
$ | 匹配字符串结尾 | print(re.match(r'.*你好$','我是某某某,你好').group()) | 我是某某某,你好 |
\b | 匹配一个单词结尾 | print(re.match(r'.\bhello\b.','ho hello world').group()) | ho hello world |
\B | 匹配非单词边界 | print(re.match(r'hello\Bworld','helloworld').group()) | helloworld |
分组
字符 | 功能 | 例子 | 结果 |
---|---|---|---|
| | 匹配左右任意一个表达式 | print(re.match(r'adc|qwe','adc').group()) | adc |
() | 把括号里面的变成一个分组 | print(re.match(r'adf(adb|e|f)','adfe').group()) | adfe |
\number | 引用分组里面的内容 | print(re.match(r'(abc)(dbc)(\1)','abcdbcabc').group()) | abcdbcabc |
(?P<name>) | 给分组起别名 | ||
(\P=name) | 应用别名是name的分组 | print(re.match(r'(?P<name1>\w)(?P=name1)','aa').group()) | aa |
当使用match里面的group方法是时候,在group里面传入分组的下表,就会返回符合这个分组的数据
print(re.match(r'(?P<name1>\w)(?P=name1)','aa').group(1))
返回结果 a
正则中的其他方法
|方法|作用
|search|从前往后查找,如果开头不是会继续往后面找
|findall|查找全部,返回一个列表,不需要调用group方法
|sub|讲将匹配到的数据进行替换
|split|将匹配到的数据进行切割,返回一个列表
str = '123456789名字'
# 第一个传入规则 第二个传入要替换后的内容 第三个传入要替换的数据
result = re.sub(r'\d+','我是2123456',str)
print(result) # 我是2123456名字
正则中的贪婪和非贪婪模式
在正则中系统默认的是贪婪模式
将贪婪模式变成非贪婪模式在数量字符后面加上?
非贪婪模式变成贪婪模式在在数量字符后面加上*