【问题标题】:How to get the match in Regex.Replace()? [duplicate]如何在 Regex.Replace() 中获得匹配? [复制]
【发布时间】:2014-09-11 11:34:59
【问题描述】:

我想有一种方法从字符串中捕捉年份并将主题放在() 之间,而且我对正则表达式非常陌生。例如

This is 2014 and the next year will be 2015

将会是

This is (2014) and the next year will be (2015)

我正在使用\d{4} 来捕获年份,但我不知道是否可以将字符串发送到下一个参数?

【问题讨论】:

    标签: c# .net regex


    【解决方案1】:

    下面的正则表达式将准确捕获输入字符串中的四位数字。在替换部分中,在捕获的数字之前和之后添加括号。

    正则表达式:

    (\b\d{4}\b)
    

    替换字符串:

    ($1)
    

    代码:

    string str = "This is 2014 and the next year will be 2015";
    string result = Regex.Replace(str, @"(\b\d{4}\b)", "($1)");
    Console.WriteLine(result);
    

    IDEONE

    模式解释:

    • () - Capturing groups.
    • \b - 称为单词边界。它匹配单词字符\w 和非单词字符\W
    • \d{4}- 正好匹配四位数字。
    • \b - 单词字符和非单词字符之间的匹配。

    【讨论】:

    • 另一个DEMO,你真快啊..
    • @YuliamChandra 最好使用单词边界。
    • 谢谢 :) 成功了 :) this 是真正的测试
    【解决方案2】:
    string pattern = @"\(\d{4}\)";
    string result = Regex.Replace(str, pattern , "($1)");
    

    这将找到括在开/关括号中的任何 4 位数字。 如果年份数字可以改变,我认为 Regex 是最好的方法。

    相反,这段代码会告诉你是否有匹配的模式

    【讨论】:

    • 你没有理解这个问题。我正在使用正则表达式,但我不知道如何检索匹配的字符串。
    • 对不起,我已经编辑了我的答案
    【解决方案3】:

    在 C# 中,你会这样做:

    Input: "This is 2014 and the next year will be 2015"
    Pattern: "\d{4}"
    Replacement: "($0)"
    

    但这将匹配所有 4 位数长的数值,根据您的模式。

    注意

    $0$& 在字符串替换模式中用于引用整个匹配项而不是任何捕获的子字符串。

    【讨论】:

    • 我使用了$1 而不是$0,这很有效。有什么区别?
    • 因为捕获组。您需要参考组索引 1 才能从第 1 组中获取值。
    • 也许将其视为捕获匹配的索引(由正则表达式模式中的括号表示)。您可以查看此资源 - 我一直使用它:msdn.microsoft.com/en-us/library/ae5bf541(v=vs.90).aspx
    • 我更新了答案以表明不必使用任何捕获组来引用字符串替换模式中的匹配值。
    【解决方案4】:

    试试这个

    "This is 2014 and the next year will be 2015".replace(/(\d{4})/gi, '($1)');
    

    【讨论】:

    • 不使用 C# 你不会!
    • System.String.Replace() 是否使用正则表达式?
    猜你喜欢
    • 2021-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-12
    • 2014-06-24
    • 2019-01-02
    • 2022-12-04
    • 1970-01-01
    相关资源
    最近更新 更多