我有一个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篇相关但又不适用的帖子,我的问题与Escape Regex.replace() replacement string in VB.net不同,因为我实际上想要替换字符串中的特殊字符。
它与Regex VB.Net Regex.Replace不同,该问题可以控制替换字符串,并使用VB常量而不是RegEx特殊字符来规避我的问题。
是否有任何设置/选项/实用程序/方法可以使我的(用户提供!)RegEx REPLACEMENT字符串正确处理特殊字符?
答案 0 :(得分:2)
有没有办法使RegEx.Replace像在PATTERN字符串中一样解释REPLACEMENT字符串中的特殊字符?例如,将“ \ t”视为选项卡,将“ \ xAE”或“ \ u00AE”视为(R)?
您是说像Regex.Unescape(String) Method吗?
如果您可以接受Remarks Section中声明的限制:
Regex.Unescape("\xAE\t\u00AE")
产生字符串结果“®”,vbTab和“®”
答案 1 :(得分:1)
VB.Net没有转义符。
根据Replace
方法的docs:
Substitutions是唯一的正则表达式语言元素 以替换模式识别。所有其他正则表达式 常规允许使用语言元素(包括字符转义符) 仅表示模式,不能在替换中识别 模式。
相当于两行代码的是:
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
名称空间,请确保导入。