Regular expression replace in C#

前端 未结 3 1787
清酒与你
清酒与你 2020-12-30 18:59

I\'m fairly new to using regular expressions, and, based on a few tutorials I\'ve read, I\'m unable to get this step in my Regex.Replace formatted properly.

Here\'s

3条回答
  •  醉梦人生
    2020-12-30 19:42

    Try this::

    sb_trim = Regex.Replace(stw, @"(\D+)\s+\$([\d,]+)\.\d+\s+(.)",
        m => string.Format(
            "{0},{1},{2}",
            m.Groups[1].Value,
            m.Groups[2].Value.Replace(",", string.Empty),
            m.Groups[3].Value));
    

    This is about as clean an answer as you'll get, at least with regexes.

    • (\D+): First capture group. One or more non-digit characters.
    • \s+\$: One or more spacing characters, then a literal dollar sign ($).
    • ([\d,]+): Second capture group. One or more digits and/or commas.
    • \.\d+: Decimal point, then at least one digit.
    • \s+: One or more spacing characters.
    • (.): Third capture group. Any non-line-breaking character.

    The second capture group additionally needs to have its commas stripped. You could do this with another regex, but it's really unnecessary and bad for performance. This is why we need to use a lambda expression and string format to piece together the replacement. If it weren't for that, we could just use this as the replacement, in place of the lambda expression:

    "$1,$2,$3"
    

提交回复
热议问题