繁体   English   中英

有没有办法让VB.NET RegEx.Replace在REPLACEMENT参数中使用特殊字符?

[英]Is there a way to get VB.NET RegEx.Replace to use special characters in the REPLACEMENT argument?

我有一个VB.NET程序,它使用RegEx将用户提供的PATTERN和REPLACEMENT参数应用于输入字符串的集合.Replace和REPLACEMENT参数中的特殊字符不会被解释。

是否有办法使RegEx.Replace像在PATTERN字符串中那样在REPLACEMENT字符串中解释特殊字符? 例如,将“ \\ t”视为选项卡,将“ \\ xAE”或“ \\ u00AE”视为(R)?

在Linux中,我从sed获得了正确的输出

echo Test XXX Replacement | sed 's/XXX/\xAE/'

给出“测试®替换”

但是在VB中,它只是为我提供了特殊字符模式作为文字

Regex.Replace("Test XXX Replacement", "XXX", "\t")
Regex.Replace("Test XXX Replacement", "XXX", "\u00AE")

分别给出“测试\\ t替换”和“测试\\ u00AE替换”

我发现2个相关但又不适用的帖子,我的问题与VB.net中的Escape Regex.replace()替换字符串不同,因为我实际上希望 替换字符串中包含特殊字符。

它也不同于Regex VB.Net Regex.Replace ,该问题可以控制替换字符串,并通过使用VB常量而不是RegEx特殊字符来规避我的问题。

是否有任何设置/选项/实用程序/方法可以使我的(用户提供!)RegEx REPLACEMENT字符串正确处理特殊字符?

是否有办法使RegEx.Replace像在PATTERN字符串中那样在REPLACEMENT字符串中解释特殊字符? 例如,将“ \\ t”视为选项卡,将“ \\ xAE”或“ \\ u00AE”视为(R)?

您是说像Regex.Unescape(String)方法一样

如果您可以接受“ 备注”部分中声明的限制:

  • 通过从该方法转义的每个字符中删除转义字符(“ \\”),可以逆转由Escape方法执行的转换。 这些包括\\,*,+,?,|,{,[,(,),^,$,。,#和空白字符。 另外,Unescape方法取消转义右括号(])和右括号(})字符。
  • 它用实际的可打印字符替换逐字字符串文字中的十六进制值。 例如,它将@“ \\ x07”替换为“ \\ a”,或将@“ \\ x0A”替换为“ \\ n”。 它将转换为受支持的转义字符,例如\\ a,\\ b,\\ e,\\ n,\\ r,\\ f,\\ t,\\ v和字母数字字符。

Regex.Unescape("\\xAE\\t\®")产生字符串结果“®”&vbTab&“®”

VB.Net没有转义字符。

根据文档Replace方法:

替换是在替换模式中唯一可识别的正则表达式语言元素。 所有其他正则表达式语言元素(包括字符转义符)仅在正则表达式模式中允许使用,而在替换模式中不识别。

相当于您的两行代码为:

Regex.Replace("Test XXX Replacement", "XXX", vbTab)
Regex.Replace("Test XXX Replacement", "XXX", ChrW(&H00AE))

如果需要在更长的替换字符串中嵌入十六进制字符串或字符,也可以在替换字符串中使用字符串插值:

Regex.Replace("Test XXX Replacement", "XXX", $"{vbTab} yyy {ChrW(&H00AE)}")

如果尚未导入,请确保导入Microsoft.VisualBasic命名空间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM