首页/开发/正则与编码速查/原始字符串写正则的必要性
正则基础45 条

原始字符串写正则的必要性

原始字符串让语言层不再解释反斜杠,把两层解析压回一层,是书写正则的推荐写法。它只影响字符串层、不影响正则层转义,也无法表示以奇数个反斜杠结尾的内容,配置文件通常不支持该语法。

正则与编码速查开发更新于 2026-10-17
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌​​‌‌‌​‌‌​​‌​‌​‌‌‌‌​​​​​‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌​​‌‌‌​‌‌​​‌​‌​‌‌‌‌​​​​​‌​‌‌​‌​‌‌‌​​‌​​‌‌​​​​‌​‌‌‌​‌‌‌​​‌​‌‌​‌​‌‌‌​​‌‌​‌‌‌​‌​​​‌‌‌​​‌​​‌‌​‌​​‌​‌‌​‌‌‌​​‌‌​​‌‌‌​​‌​‌‌​‌​‌‌‌​​​​​‌‌​​​​‌​‌‌‌​‌​​​‌‌‌​‌​​​‌‌​​‌​‌​‌‌‌​​‌​​‌‌​‌‌‌​​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​

原始字符串解决什么

原始字符串让语言不再把反斜杠当作转义引导符,内容原样保留,于是模式里写几个反斜杠,到引擎手里就是几个。它把「两层解析」压回一层,是写正则时最省心的习惯。

它不是万能药

原始字符串只关闭语言层的转义处理,不改变正则层规则:想匹配字面点号仍然要写转义写法。它也无法表示以奇数个反斜杠结尾的字符串,这类边界需要拼接或改用普通字符串。

基本信息

常见写法多数语言用前缀字母表示原始或逐字字符串
主要收益避免反斜杠被语言层消费,模式可读性明显提升
作用边界只影响字符串层,正则层转义照旧
限制不能以单个反斜杠结尾,也不能表示该形式下的引号转义
不支持的语言部分语言没有该语法,只能用双写反斜杠或字符串拼接
配置文件配置里的模式仍按该格式的转义规则处理,原始字符串语法通常不适用

典型使用场景

  • 代码里内联书写包含字符类、边界断言与转义点的模式
  • 把模式作为参数传给函数时保持内容不被预处理
  • 测试用例中写期望的模式字符串,避免测试与实现都错
  • 迁移模式时保持与源文档一致,便于逐字比对
  • 排查层数问题时作为对照实验的基线写法

原始写法的使用与限制

原始写法的使用与限制
import re
re.findall(r'\d+', 'a12')          # 原始字符串:反斜杠原样交给引擎
re.findall('\\d+', 'a12')          # 普通字符串:需要双写,易读性差
re.search(r'\.', 'a.b')           # 原始字符串里点号转义依旧要写
re.search(r'\n', 'a\nb')            # 匹配换行符:反斜杠加字母
re.search(r'(?x) a \. b', 'a.b')   # 自由间距模式下空格要转义
# 不能以奇数个反斜杠结尾,例如表示单个反斜杠需另想办法
re.search(r'\\', 'a\\b')           # 这样写才是匹配一个反斜杠

各语言写法对照

语言原始写法注意点
Python前缀 r不能以单个反斜杠结尾
C#前缀 @引号内双写引号表示引号
Java无此语法只能双写反斜杠
JavaScript可用 String.raw 包装常见场景仍是双写反斜杠
配置文件通常不适用按该格式规则整体翻倍
原始字符串不是「正则专用语法」,它只是字符串字面量的一种形式。理解成「关掉语言层转义」能避免很多误用,例如误以为它能替代正则层的转义。
部分语言对普通字符串里未识别的转义会给出编译期警告甚至报错。若暂时无法改用原始写法,至少要把这类警告当作错误处理,避免部署后才暴露。

易错点

  • 以为原始字符串可以省掉正则层的转义,写出语义不符的模式
  • 用原始字符串表示以单反斜杠结尾的内容,语法直接失败
  • 在配置文件里照搬代码中的原始字符串写法,配置格式并不支持该语法
  • 混用两种写法后忘记统一,同一份模式在文件里出现两种形式,维护时容易改错

数据来源与参考

  • Python 官方文档:原始字符串字面量与 re 模块建议
  • C# 语言规范:逐字字符串字面量
  • Java 语言规范:字符串字面量中的转义序列

整理校对:其其网ICT文档中心 · 本页地址:docs.qiqicto.com/regex/regex-raw-string-pattern.html

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌​​‌‌‌​‌‌​​‌​‌​‌‌‌‌​​​​​‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌​​‌‌‌​‌‌​​‌​‌​‌‌‌‌​​​​​‌​‌‌​‌​‌‌‌​​‌​​‌‌​​​​‌​‌‌‌​‌‌‌​​‌​‌‌​‌​‌‌‌​​‌‌​‌‌‌​‌​​​‌‌‌​​‌​​‌‌​‌​​‌​‌‌​‌‌‌​​‌‌​​‌‌‌​​‌​‌‌​‌​‌‌‌​​​​​‌‌​​​​‌​‌‌‌​‌​​​‌‌‌​‌​​​‌‌​​‌​‌​‌‌‌​​‌​​‌‌​‌‌‌​​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​