【问题标题】:Need help in Regex Replace C#在正则表达式替换 C# 中需要帮助
【发布时间】:2010-01-14 17:02:11
【问题描述】:

有没有办法让正则表达式检查第一个和最后一个字符,但只替换 IV 而不是空格。

Regex.Replace("This is IV item.", "[^A-Za-z0-9](IV)[^A-Za-z0-9]", "fourth");

请不要告诉我 MatchEvaluator 和其他基于 Match 的东西,我需要一个单行解决方案,一行并不意味着组合代码,它意味着只使用 Replace 方法。

另外,我说的不仅仅是空格,我指的是任何字符,例如:(

再一次,让我澄清一下,除了一些匹配字符但不会替换它的正则表达式符号之外,我不是在寻找其他任何东西,而不是这种方法:

Regex.Replace("This is IV item.", "([^A-Za-z0-9])(IV)([^A-Za-z0-9])", "$1fourth$3");

因为这个正则表达式是某些代码的参数,它会自动将 $1 用于某些事情,我不想更改该代码,所以有没有办法让 $1 仅是 IV,同时检查前一个字符也是。

【问题讨论】:

  • 如果我可能会问,为什么你需要一个单线?
  • 如前所述,Regex Replace 位于其他一些库中,我不想修改。正则表达式是对此的输入。所以问题是关于编写正则表达式而不是 C# 代码。

标签: c# regex


【解决方案1】:
Regex.Replace("This is IV item.", @"\bIV\b", "fourth");

【讨论】:

  • “这是 !IV 项目”怎么样。我说它可以是任何符号。
  • 这适用于“这是!IV 项目”。 “虽然这是 _IV_ 项”,但它失败了。
  • 单词边界 (\b) 方法非常简单,通常是您所需要的。如果这还不够,那么您应该使用后视/前瞻解决方案。
【解决方案2】:

您的问题并不完全清楚您想要接受和拒绝什么,但我认为您需要这样的东西:

Regex.Replace("This is IV item.", "(?<=[^A-Za-z0-9])(IV)(?=[^A-Za-z0-9])", "fourth");

【讨论】:

    【解决方案3】:

    您正在寻找的是所谓的look behindslook ahead。 尝试使用(?&lt;=\ )IV(?!&lt;=\ ) 作为模式。

    【讨论】:

    • +1 就像我正在寻找的那样。对不起,不接受这个原因我遇到了给定语法的问题,所以接受这个例子。
    • 我想你的意思是(?&lt;=\ )IV(?=\ )。无论如何,OP 说周围的字符可以是 ASCII 字母和数字以外的任何字符,而不仅仅是空格。
    猜你喜欢
    • 2011-05-27
    • 1970-01-01
    • 2012-11-30
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 2012-03-09
    • 2011-09-19
    • 1970-01-01
    相关资源
    最近更新 更多