正则表达式描述了一种字符串匹配的模式(pattern),用来检查一个字符串中是否含有某种字符串,将匹配到的字符串替换或者从某个串中取出符合某个条件的字串等。
匹配的方法
1、re.match(pattern, string, flags=0),match只匹配起始位置的子字符串,即返回结果只有一个,否则返回None;
-- pattern:表示正则表达式
-- string:要匹配的字符串
-- flags:控制匹配的方式
2、re.search(pattern, string, flags=0),search 可以扫描整个字符串并返回第一个成功匹配的子字符串,即返回结果只有一个,否则返回None;
3、re.findall(pattern, string, flags=0),findall 可以找到所有满足匹配条件的结果,并以列表的形式返回,否则返回None;
在正则表达式中, group() 是用来取出分组截获到的子字符串,() 用来分组的,group只适用于match、search()方法;
在以上的示例中,把匹配到的字符串可分为三组,因为正则规则是有三个();
group() 等价于group(0) ,即匹配到的字符整体结果;
group(1):匹配规则中的第一个括号内容;
group(2):匹配规则中的第二个括号内容;
group(3):匹配规则中的第三个括号内容;
语法:
-- .:点表示匹配任意的一个字符,除了\n;
-- \w:匹配字母、数字、下划线的字符串;
-- \d:匹配数字;
-- * :* 表示匹配任意字符0次或者任意次;
-- + :+表示匹配任意字符1次或者任意次;
-- ?:表示0次或者1次,非贪婪模块,即返回匹配成功的字符串为0次或者1次;
-- [ ] : 匹配里面的任意一次
-- {m, n}:最少匹配m次,最多匹配n次
更多的语法可查看:https://www.runoob.com/regexp/regexp-metachar.html
替换:
语法:re.sub(pattern, repl, string, count=0, flags=0)
-- pattern:正则规则
-- repl:要替换的字符串
-- string:要查找的字符串
-- count:替换次数
-- flags:控制匹配的方式
终合使用示例:
import re
def replace_data(target):
pattern = r'#(.*?)#'
while re.findall(pattern, target):
# value = re.search(pattern, target).group(1)
# repl = getattr(Contexy, value) 可动态获取某个类的属性
target = re.sub(pattern, '123', target, 1)
strings = {"user_name": "#user_name#", "password": "#password#"}
replace_data(strings)