-1

I have this string:

Hello22, I'm 19 years old

I just want to replace the number with * if its preceded with a space, so it would look like this:

Hello22, I'm ** years old

I've been trying a bunch of regexes but no luck. Hope someone can help out with the correct regex. Thank you.

Regexes which I tried:

Regex.Replace(input, @"([\d-])", "*");

Returns all numbers replaced with *

Regex.Replace(input, @"(\x20[\d-])", "*");

Does not work as expected

marc_s
  • 732,580
  • 175
  • 1,330
  • 1,459

2 Answers2

1

You can try (?<= )[0-9]+ pattern where

(?<= ) - look behind for a space
[0-9]+ - one or more digits.

Code:

string source = "Hello22, I'm 19 years old";

string result = Regex.Replace(
  source, 
 "(?<= )[0-9]+", 
  m => new string('*', m.Value.Length));

Have a look at \b[0-9]+\b (here \b stands for word bound). This pattern will substitute all 19 in the "19, as I say, 19, I'm 19" (note, that 1st 19 doesn't have space before it):

string source = "19, as I say, 19, I'm 19";

string result = Regex.Replace(
   source, 
 @"\b[0-9]+\b", 
   m => new string('*', m.Value.Length)); 
Dmitry Bychenko
  • 180,369
  • 20
  • 160
  • 215
0

In C# you could also make use of a pattern with a lookbehind and an infinite quantifier.

(?<= [0-9]*)[0-9]

The pattern matches:

  • (?<= Positive lookbehind, assert what is to the left of the current position is
    • [0-9]* Match a space followed by optional digits 0-9
  • ) Close lookbehind
  • [0-9]\ Match a single digit 0-9

Example

string s = "Hello22, I'm 19 years old";
string result = Regex.Replace(s, "(?<= [0-9]*)[0-9]", "*");
Console.WriteLine(result);

Output

Hello22, I'm ** years old
The fourth bird
  • 154,723
  • 16
  • 55
  • 70