Re Ne
Re Ne

Reputation: 43

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!

Upvotes: 4

Views: 1725

Answers (3)

Sayse
Sayse

Reputation: 43300

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);

Upvotes: 0

Dmitrii Bychenko
Dmitrii Bychenko

Reputation: 186668

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

Upvotes: 1

omriman12
omriman12

Reputation: 1690

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")...

Upvotes: 1

Related Questions