py 正则表达式

一. 简介

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], 盛放所有匹配到的内容.

三. 常用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)
"""
《全职猎人》
《雨的世界》
《闪乱神乐:沙滩戏水》
《百战沙城》

全职猎人
雨的世界
闪乱神乐:沙滩戏水
百战沙城

"""

参考

  1. my blog, 正则表达式
  2. 菜鸟教程, python3-reg-expressions
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值