如何替换正则表达式中的实际星号字符 (*)?
Posted
技术标签:
【中文标题】如何替换正则表达式中的实际星号字符 (*)?【英文标题】:How do I replace an actual asterisk character (*) in a Regex expression? 【发布时间】:2011-02-17 14:18:28 【问题描述】:我有一个声明:
我有一个字符串,比如
content = "* test *"
我想搜索并替换它,所以当我完成后,字符串包含以下内容:
content = "(*) test (*)"
我的代码是:
content = Regex.Replace(content, "*", "(*)");
但这会在 C# 中导致错误,因为它认为 * 是正则表达式语法的一部分。
如何修改此代码,以便将字符串中的所有星号更改为 (*) 而不会导致运行时错误?
【问题讨论】:
【参考方案1】:由于*
是一个正则表达式元字符,当您需要它作为字符类定义之外的文字星号时,需要使用\
将其转义为\*
。
在 C# 中,您可以将其写为 "\\*"
或 @"\*"
。
C# 还应该有一个通用的“引用”方法,以便您可以引用任意字符串并将其作为文字进行匹配。
另见
Regular expressions and escaping special characters 需要转义的内容、地点/时间的完整列表【讨论】:
【参考方案2】:你可以逃脱它:
\*
【讨论】:
另外,如果您正在编写正则表达式,请考虑使用工具。 Expresso 帮助了我很多:ultrapico.com/Expresso.htm【参考方案3】:在这个简单的场景中,您不需要正则表达式。您可以使用 String.Replace:
content = content.Replace("*", "(*)");
【讨论】:
【参考方案4】:使用Regex.Escape()
它将获取所有字符串并将其制成您可以用作正则表达式的一部分的内容。
【讨论】:
【参考方案5】:在 regex.replace 调用中使用 \\*
而不是 *
【讨论】:
以上是关于如何替换正则表达式中的实际星号字符 (*)?的主要内容,如果未能解决你的问题,请参考以下文章
使用正则表达式在机器人框架中用星号替换字符串的前两个和后两个字符以外的字符