regex和普通的转义字符不一样...

是的,可以这么理解!正则表达式中的转义符确实和一般的字符串处理有点不一样。具体来说:

1. 普通字符串的转义规则

在普通字符串(非正则表达式)中:

  • Python 使用 \ 作为转义符,比如 \n 表示换行,\\ 表示一个反斜杠。

2. 正则表达式的转义规则

在正则表达式中:

  • \ 也是转义符,用于构造特殊符号(比如 \d, \s, \w 等),但同时它也需要被“保护”成普通字符, 即希望某些特殊字符在正则表达式中不要被解释为特殊含义,而是直接按照它的字面意义来匹配。

问题在于两层转义:

  • Python 的字符串转义规则正则表达式引擎的转义规则 可能会相互叠加。
  • 为了避免混淆,正则表达式中的 \ 通常需要额外转义,写成 \\,以防止 Python 先处理掉它

3. 原始字符串解决转义问题

使用 r""(原始字符串)是 Python 为了简化正则表达式书写提供的便利:

  • 原始字符串告诉 Python,不对字符串中的反斜杠进行额外处理。
  • 这样你只需要关注正则表达式本身的语法规则,而不用担心 Python 的转义问题。

示例对比

  1. 匹配数字字符 \d

    import re
    
    # 匹配数字字符
    text = "123abc"
    pattern = r"\d"  # 用原始字符串
    print(re.findall(pattern, text))  # 输出: ['1', '2', '3']
    

    不使用原始字符串:

    pattern = "\\d"  # 手动加双反斜杠
    print(re.findall(pattern, text))  # 同样输出: ['1', '2', '3']
    
  2. 匹配 \d 本身:

    text = r"This is \d."
    pattern = r"\\d"  # 双反斜杠匹配单个反斜杠 + d
    print(re.findall(pattern, text))  # 输出: ['\\d']
    

    不使用原始字符串:

    pattern = "\\\\d"  # 每层需要双反斜杠
    print(re.findall(pattern, text))  # 输出: ['\\d']
    

总结

  • 正则表达式的转义(\d, \s, \w)需要用反斜杠保护。
  • Python 字符串层会先对反斜杠处理,因此写正则时可能需要两层转义
  • 原始字符串 r"" 是写正则的好帮手,能省掉很多不必要的复杂转义逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值