Handling regex escape replacement text that contains the dollar character

string input = "Hello World!";
string pattern = "(World|Universe)";
string replacement = "$1";

string result = Regex.Replace(input, pattern, replacement);

Having the following example, the result would be "Hello World!", as the $1 gets replaced with the first group (World|Universe), however the result I want is "Hello $1!"

The Regex.Escape method is meant to be used to escape a Regex pattern, not the replacement, as it can escape other characters like slashes and other Regex pattern characters. The obvious fix to my problem is to have my replacement equal to "$$1", and will achieve "Hello $1!", but I was wondering if the dollar sign is the only value I have to escape (assuming replacement is user generated, and I do not know it ahead of time), or is there a helper function that does this already.

Does anyone know of a function to escape the replacement value that Regex.Replace(string input, string pattern, string replacement) uses?

Answers


From MSDN:

The replacement parameter specifies the string that is to replace each match in input. replacement can consist of any combination of literal text and substitutions.

The following substitutions are defined:

  • $number
  • ${name}
  • $$
  • $&
  • $`
  • $'
  • $+
  • $_

Substitutions are the only special constructs recognized in a replacement pattern. None of the other regular expression language elements, including character escapes and the period (.), which matches any character, are supported. Similarly, substitution language elements are recognized only in replacement patterns and are never valid in regular expression patterns.

So it look like it's only the $ character that needs to be escaped.


Need Your Help

How to create a Java cron job

java cron

I'm writing a standalone batch Java application to read data from YouTube. I want to set up an cron job to do certain job every hour.

Getting a wrong value from the macro function

c++ preprocessor c-preprocessor

recently i m working on Macros and I got stuck in very simple problem. Here is my code:

About UNIX Resources Network

Original, collect and organize Developers related documents, information and materials, contains jQuery, Html, CSS, MySQL, .NET, ASP.NET, SQL, objective-c, iPhone, Ruby on Rails, C, SQL Server, Ruby, Arrays, Regex, ASP.NET MVC, WPF, XML, Ajax, DataBase, and so on.