【问题标题】:Regex Pattern for string replace字符串替换的正则表达式模式
【发布时间】:2016-11-21 20:57:57
【问题描述】:

我有一句话,“姓名#2”,

我需要将“#”替换为“No.”,

最后一句必须是“2号名字”。

代码 -

string sentence = Regex.Replace("Name # 2", "\\#\\b", "No.");

显然 Regex.Replace 无法将“#”替换为“否”,是否有通过正则表达式解决问题的正确方法。 谢谢 我正在寻找正则表达式模式的原因是因为有一个执行的通用代码如下所示

     string pattern = string.Format(@"\b{0}\b", context);

     sentence = System.Text.RegularExpressions.Regex.Replace(sentence, pattern, suggestion);

上下文 - “#”

句子 - “名字#2”

建议 - “不”。

预期句子 - “2 号姓名”

实际句子 - “姓名#2”

上下文 - “曾经”

句子 - “他要去”

建议 - “曾经”

预期的句子 - “他要去”

实际句子 - “他要去”

上下文 - “a”

sentence - “他正处于某个时间点。”

建议 - “z”

预期句子 - “他在 z 时间点”

【问题讨论】:

  • 天啊!为什么是正则表达式?
  • @ThomasWeller 我已经编辑了我的问题。
  • \b 匹配单词边界(在字母数字和其他字符之间)。在您的输入中,# 旁边没有这样的边界。
  • 编辑仍然没有解释为什么需要正则表达式。这两种情况似乎都可以通过简单的字符串替换来解决。
  • @ThomasWeller 我需要替换句子中的 a,例如“他在某个时间点回家”,我最终替换了句子中所有可用的 'a,因此使用了正则表达式!

标签: c# regex


【解决方案1】:

如果# 前面带有单词 字符、字母、数字或下划线,则当前正则表达式将不匹配。发生这种情况是因为单词边界含义取决于上下文。

将其替换为以下任何修复:

string pattern = string.Format(@"(?<!\w){0}(?!\w)", Regex.Escape(context));
                                 ^^^^^^    ^^^^^^

(?&lt;!\w)(?!\w) 与上下文无关,如果前面/后面没有字符字符,则将匹配一个单词。

或者,使用

string pattern = string.Format(@"(?<!\S){0}(?!\S)", Regex.Escape(context));

仅匹配空格内的单词 (?&lt;!\S) 负后向需要在“单词”之前的空格或字符串的开头,而负前瞻(?!\S) 需要在字符串的结尾或空格之后“词”。

请注意,Regex.Escape 在您处理用户输入/动态模式构建并且需要在正则表达式模式中使用 literal 字符串时是必须的。它将转义所有可能破坏模式的特殊字符(如?+ 等)。

【讨论】:

    【解决方案2】:
    string test = "Name # 2";
    
    test = test.Replace("#", "No.");
    

    【讨论】:

    • 对不起,我需要通过正则表达式,
    • test = Regex.Replace(test, "#", "No.");
    • @Sandepku 您应该解释(编辑您的帖子)为什么您需要使用正则表达式。
    【解决方案3】:

    你可以试试:

    string sentence = Regex.Replace("Name # 2", "#", "No.");
    

    # 不必转义,因此不需要反斜杠。

    【讨论】:

      【解决方案4】:

      使用正则表达式,您可以这样做:

      Regex.Replace("Name # 2", "#", "No.")
      

      或者只是一个普通的旧字符串。替换:

      "Name # 2".Replace("#", "No.");
      

      【讨论】:

        猜你喜欢
        • 2019-11-12
        • 1970-01-01
        • 1970-01-01
        • 2018-07-13
        • 2017-02-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多