python 正则表达式转义上的 r 与反斜杠

本文详细介绍了Python中字符串转义与正则表达式的转义机制。通过实例展示了如何使用原始字符串(r前缀)来避免不必要的转义,并在正则匹配过程中正确处理特殊字符。对于理解字符串处理和正则操作具有指导意义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先阅读
https://blog.csdn.net/jinixin/article/details/56705284

后举例
转义有两种:

  1. 首先是正常的字符串转义,对于特殊的字符进行转义。
  2. 然后,对于正则表达式还要进行一次转义。

使用原生字符r 可以跳过一次转义。所以在正则表达式前可以加上’r’,这样负负得正。

import re
str = "d:\\ab\dc\\n"
print(str)
#输出:d:\ab\dc\n
# 经过字符转义('\\'-->'\'),\d不是特殊字符,没有进行转义

string = "d:\\abc\\n"
print(string)
#输出:d:\abc\n
# 经过字符转义('\\'-->'\')

tran_string1=re.match("d:\\\\abc", string).group()
print(tran_string1)
#输出:d:\abc
# 经过字符转义('\\\\'-->'\\'), 再经过正则转义('\\'-->'\'),于是匹配

tran_string2=re.match(r"d:\\abc", string).group()
print(tran_string2)
#输出d:\abc
# 使用r(原生字符)跳过字符转义-->正则转义('\\'-->'\'),于是匹配
### Python正则表达式转义字符使用方法 在 Python正则表达式中,某些字符具有特殊的含义,为了匹配这些特殊字符本身,需要对其进行转义。这涉及到两层转义:一层是在字符串层面,另一层是在正则表达式引擎层面[^2]。 #### 基本概念 当编写正则表达式模式时,如果想要匹配像 `.`、`*` 或 `\` 这样的元字符,就需要在其前加反斜杠来取消其特殊意义并将其视为普通字符。例如: ```python import re pattern = r'\.' text = "This is a test string with dots..." matches = re.findall(pattern, text) print(matches) # 输出所有的句号 [.] ``` 上述例子展示了如何利用反斜杠使点号失去通配符功能而成为字面意义上的`.`[^1]。 对于一些常见的字符类,Python 提供了预定义好的转义序列以便于描述特定类型的字符集合。比如`\d`代表任意一位数字(0-9),要查找所有连续的数字可以这样做: ```python number_pattern = r'\d+' numbers_in_text = 'Price: $876.54' found_numbers = re.findall(number_pattern, numbers_in_text) print(found_numbers) # ['876', '54'] ``` 这里使用的`\d`就是一种由反斜杠开头的特殊序列,它用来简化对常见字符集的操作[^3]。 值得注意的是,在构建包含大量反斜杠正则表达式时,建议总是采用原始字符串(raw strings),即以字母'r'作为引号之前缀的形式书写字符串。这样做的好处是可以减少不必要的双倍反转斜线问题,提高可读性和维护性。 #### 实际应用案例 假设有一个需求是要在一个文本文件里找到所有的电子邮件地址,则可以通过组合不同的转义字符实现这一目标: ```python email_regex = r'[a-]+\.[a-zA-Z0-9-.]+' sample_emails = """ Contact us at support@example.com or sales@company.co.uk. For more information visit our website http://www.example.org. """ emails_found = re.findall(email_regex, sample_emails) for email in emails_found: print(f"Found Email Address: {email}") ``` 这段代码片段说明了怎样运用多种转义字符以及字符组去精确地定位复杂的结构化数据——这里是电子邮件格式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值