"""
re模块各方法区别
search:若string中包含pattern子串,则返回Match对象,否则返回None,注意,如果string中存在多个pattern子串,只返回第一个
findall:返回string中所有与pattern相匹配的全部字串,返回形式为数组。
finditer:返回string中所有与pattern相匹配的全部字串,返回形式为迭代器。
"""
import re
# 需要匹配的字符串
string = '12abc45'
result = re.search(pattern='abc', string=string)
print(result)
# 获取匹配到的子字符串
print(result.group())
result = re.search(pattern='2a', string=string)
print(result)
# .: 匹配任意字符,\n 除外
result = re.search(pattern='.', string=string)
print(result)
# [7a] 匹配7或者a
string = '127bc45'
result = re.search(pattern='[7a]', string=string)
print(result)
string = 'cccc'
result = re.search(pattern='\d', string=string)
print(result)
# *: 匹配某个字符零次->无限次
string = 'a7abc45'
result = re.search(pattern='a*', string=string)
print(result)
# *: 匹配某个字符零次->无限次
# 贪婪模式 vs 非贪婪模式
# Python使用正则表达式:贪婪模式。
string = 'a7abc45'
result = re.search(pattern='.*', string=string)
print(result)
# 启用非贪婪模式?
string = 'a7abc45'
result = re.search(pattern='.*?', string=string)
print(result)
# 需要匹配 #mobile_phone# #pwd#
string = '{"member_id":"#pwd#","amount":#money#}'
import re
# result = re.search('#.*?#', string)
# print(result)
# 分组
result = re.search('#(.*?)#', string)
print(result)
# result.group() 正则表达式匹配到的整个结果
print(result.group(0)) # #pwd#
# result.group(1) :结果当中第一个括号里面的内容,
# result.group(2), 第二个括号里面的内容
print(result.group(1))
string = '{"member_id":"#pwd#","amount":#money#}'
class Data:
pwd = '123456'
money = 100
# 方法一:if
# 方法二: 正则表达式 re.search, re.finditer
import re
result = re.finditer('#(.*?)#', string)
for el in result:
# el 匹配到的每个数据
# print(el.group())
# print(el.group(1)) # pwd
# 字符串替换, replace
old = el.group() # #pwd#
prop_name = el.group(1) # pwd
string = string.replace(old, str(getattr(Data, prop_name)) )
print(string)
# 1, getattr()
# 2, re.finditer()
# 3, .*?
# 4, group(), group(1)