排除模式和条件替换

时间:2014-07-20 08:56:28

标签: c# regex

在此输入中:

hello Sam, how are you 27‏ do not worry 5
how are you  why you are not OK.ℏ  and ‍ 

我想执行一些条件替换:

"2" => "a"
"7" => "b"
"5" => "c"

我还需要排除‏ 等字符串,我们可以使用此模式:&#x\w+;

这是我开始的。但是,我不知道如何排除这种模式。

inputstring="hello Sam, how are you 27‏ do not worry 5
how are you  why you are not OK.ℏ  and ‍";
string reg = @"2!(&#x\w+;)";
Regex myRegex = new Regex(reg);
string newstring = myRegex.Replace(inputstring, "a");

1 个答案:

答案 0 :(得分:3)

代表替换功能

我们可以使用这个令人惊讶的简单正则表达式:

&#x\w+;|([257])

这个问题是这个问题中解释为"regex-match a pattern, excluding..."的技术的经典案例 - 而且是一个特别有趣的问题,因为根据匹配的数字有不同的替换。

在正则表达式中,交替|的左侧与完成html entities匹配。我们将忽略这些匹配(我们匹配它们以中和它们)。右侧匹配数字2,5或7,我们知道它们是正确的,因为它们与左侧的表达式不匹配。

此程序显示了如何使用正则表达式(请参阅the online demo底部的结果):

    var myRegex = new Regex(@"&#x\w+;|([257])");
    string s1 = @"hello Sam, how are you 27‏ do not worry 5
how are you  why you are not OK.ℏ  and ‍ ";

    string replaced = myRegex.Replace(s1, delegate(Match m) {
    switch (m.Groups[1].Value) {
        case "2": return "a";
        case "7": return "b";
        case "5": return "c";
        default: return  m.Value;
        }
    });
    Console.WriteLine(replaced);

<强>输出:

hello Sam, how are you ab&#x200f; do not worry c
how are you &#xa0;why you are not OK.&#x210f;  and &#x200d; 

参考