一. 简介
regular-expression 自身语法见参考 [1].
py 中需要导入 re
模块. 因 py 有 r'\d'
这样的 raw string 写法, 所以表达 pattern 时可以避免两层转义, 视觉更友好.
\w
是能组成单词的字符,在python3 中 re 默认支持的是unicode字符集,当然也支持汉字.
二. 相关 class
- class
SRE_Match
- def
group
(self, group: int = …) -> str | None - def
groups
(self), 返回 tuple[str], 盛放所有匹配到的内容.
- def
三. 常用api
re.search
扫描整个字符串并返回第一个成功的匹配。
search
(pattern, string, flags=0) -> SRE_Match- return, SRE_Match
import re
def extract_fn(slot_var_name):
"""
详见: https://aliyuque.antfin.com/dwqr0g/zpw3vm/twbl7q2aqbdny71a/#vWrAi
:param slot_var_name: 形如 Optimize/OptimizeLoss_1/Deep/Deep_Embeddings/u_province_emb_embedding/weights/part_2/AdagradDecay_1
:return: Deep/Deep_Embeddings/u_province_emb_embedding/weights/mbedding/weights/part_2/AdagradDecay_1
"""
pattern = r"(.*OptimizeLoss(_\d)*)/(.*)/(part_\d+)"
# 形如
res = re.search(pattern, slot_var_name)
prefix = res.groups()[0]
primary_name = res.groups()[2]
part_text = res.groups()[3]
return prefix, primary_name, part_text
if __name__ == '__main__':
slot_var_name_1 = "Optimize/OptimizeLoss_1/Deep/Deep_Embeddings/u_province_emb_embedding/weights/part_2/AdagradDecay_1"
slot_var_name_2 = "Optimize/OptimizeLoss_1/Deep/Deep_Embeddings/m_ui_ctype_det_emb_embedding/weights/part_10/AdagradDecay"
slot_var_name_3 = "Optimize/OptimizeLoss/Wide/Deep_Embeddings/u_province_emb_embedding/weights/part_12/AdagradDecay"
print(extract_fn(slot_var_name_1))
print(extract_fn(slot_var_name_2))
print(extract_fn(slot_var_name_3))
"""
('Optimize/OptimizeLoss_1', 'Deep/Deep_Embeddings/u_province_emb_embedding/weights', 'part_2')
('Optimize/OptimizeLoss_1', 'Deep/Deep_Embeddings/m_ui_ctype_det_emb_embedding/weights', 'part_10')
('Optimize/OptimizeLoss', 'Wide/Deep_Embeddings/u_province_emb_embedding/weights', 'part_12')
"""
re.findall
findall(pattern, string, flags=0)
返回 list.
# 找出所有书名号里面的内容
import re
text="""
是时候去打麻将了!《全职猎人》下周“又”开始休刊
独立游戏《雨的世界》 Steam预购开启
可“破衣”的性感装 《闪乱神乐:沙滩戏水》新衣装
追忆战火流年 《百战沙城》首服火爆开测中
"""\
result_list=re.findall('《.+》',text)
for x in result_list:
print(x)
# 加了小括号表示内容抠取
result_list=re.findall('《(.+)》',text)
for x in result_list:
print(x)
"""
《全职猎人》
《雨的世界》
《闪乱神乐:沙滩戏水》
《百战沙城》
全职猎人
雨的世界
闪乱神乐:沙滩戏水
百战沙城
"""
参考
- my blog, 正则表达式
- 菜鸟教程, python3-reg-expressions