简体   繁体   中英

regex replace multiple patterns

I'm new in programming and need some help ;-) how can I replace multiple patterns in a string ?

Example:

static void Main(string[] args)
{
  string input = "this is a test AAA one more test adakljd jaklsdj BBB sakldjasdkj CCC";
  string [] pattern = {"AAA", "BBB","CCC"};
  string replacement = "XXX";

  string result = null;
  for (int i = 0; i < pattern.Length; i++)
  {
    result = Regex.Replace(input, pattern[i], replacement);
  }

  Console.WriteLine(result);
}

Want the result:

this is a test XXX one more test adakljd jaklsdj XXX sakldjasdkj XXX

But I get:

this is a test AAA one more test adakljd jaklsdj BBB sakldjasdkj XXX

thx for help in advance!

You don't need a regex, you simply can use Replace :

string input = "this is a test AAA one more test adakljd jaklsdj BBB sakldjasdkj CCC";
string replaced = input.Replace("AAA", "XXX").Replace("BBB", "XXX")...

I suggest combining all patterns' parts ( "AAA", ..., "CCC" ) with | ("or"):

  string input = "this is a test AAA one more test adakljd jaklsdj BBB sakldjasdkj CCC";
  string[] pattern = { "AAA", "BBB", "CCC" };
  string replacement = "XXX";

  string result = Regex.Replace(
    input, 
    string.Join("|", pattern.Select(item => $"(?:{item})")), 
    replacement);

  Console.WriteLine(result);

Outcome:

this is a test XXX one more test adakljd jaklsdj XXX sakldjasdkj XXX 

I've turned each pattern part like BBB into a group (?:BBB) in case pattern part contains | within itself

You're overwriting the result variable throughout the loop repeatedly, there doesn't seem to be any need for it either, just use the input variable

input = Regex.Replace(input, pattern[i], replacement);
...
Console.WriteLine(input);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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