python 正则

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名字

正则中的贪婪和非贪婪模式

在正则中系统默认的是贪婪模式
将贪婪模式变成非贪婪模式在数量字符后面加上?
非贪婪模式变成贪婪模式在在数量字符后面加上*

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容