![](/img/trans.png)
[英]Is there a way to get the variables that were used in a RegEx.Replace to use in .NET?
[英]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)方法一样 ?
如果您可以接受“ 备注”部分中声明的限制:
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.