我的理解是,Regex.Escape通过自动将包含正则表达式元字符的模式转换为该模式的"转义"版本来帮助生成正则表达式模式.

因此,如果您只想匹配abc.abc,则不能将其用作模式,因为句点(或点)是一个正则表达式元字符,恰好是通配符.Regex.Escape可以方便地将其转换为abc\.abc,它可以用作不使用点作为通配符的正则表达式模式.

Regex.Escape"转义"14个字符...

转义最小字符集(,*,+,?,|,{,[,(,),^,$, .、#和空格),用它们的转义代码替换它们.

然而,似乎只有12个字符与自己不匹配.除了这do个字符之外,其他字符都与其自身匹配.

...$^{[(|)*+?\

This is the link to the reference that says there are 12 chars that do not match themselves.

做出这一声明的确切措辞是...

字符或序列列中列出的字符以外的字符 在正则表达式中没有特殊意义;它们自身匹配.

不同之处在于Regex.Escape文档中提到的最后两个字符是空格和数字符号.为什么Regex.Escape支持的字符多于12个与自身不匹配的字符?

推荐答案

free-spacing mode(RegexOptions.IgnorePatternWhitespace)中,#和空格本身不匹配:#开始注释,空格被忽略.

还有一张the documentation page you linked to分的音符:

如果正则表达式模式包含数字符号(#)或原义空格字符,则在启用RegexOptions.IgnorePatternWhite空格选项的情况下分析输入文本时,必须对它们进行转义.

例如,这恰好等于print\('Loremipsum'\):

(?x)
print\('Lorem ipsum'\)  (?#Inline comment)
 # Comment

...而这与"print('Lorem ipsum')\n # Comment"匹配(\n是实际的换行符):

(?x)
print\('Lorem\ ipsum'\)  (?#Inline comment)\
\ \#\ Comment

.net相关问答推荐

实体框架核心:Azure容器应用程序的执行超时已过期

.NET restore/build在使用组织包的Github Action工作流中调用时获得401

创建仅包含msBuild.Target的Nuget包

如何按需计算一个值并将该值缓存在FP/F#中?

使用 Task.WhenAll 但需要跟踪每个单独的 Task 的成功

无法解析此引用.找不到程序集

判断 Windows 路径中是否存在可执行文件

xunit Assert.ThrowsAsync() 不能正常工作?

NonSerialized 属性

如何解决请确保文件可访问并且它是有效的程序集或 COM 组件?

ASP.NET MVC:隐藏字段值不会使用 HtmlHelper.Hidden 呈现

使用 IIS Express 托管网站(临时)

您可以在 C# 代码中捕获本机异常吗?

公钥令牌的作用是什么?

检索字典值最佳实践

mscorlib 代表什么?

Linq to SQL - 返回前 n 行

.Net 正则表达式:单词字符 \w 是什么?

.NET 桌面应用程序中的 Settings.settings 与 app.config

Dictionary.Add 与 Dictionary[key]=value 的区别