我虽然过滤了一个字符串,如:
"Hello <strong>plip</strong> plop"
获得
"plip plop"
,即排除除“plip”和“plop”之外的所有单词,使用此C#行很容易:
new Regex("[^(plip)(plop)]").Replace(inputString,"")
。
不幸的是,排除括号[^]
似乎不接受排除词,因为它保留了'plip'和'plop'中包含的每个字母(结果为"llooplipoplop"
)。
有没有办法在单个正则表达式/行中实现这一点,或者是否需要循环其他所有plip和plop匹配,然后将它们连接起来?
答案 0 :(得分:3)
答案 1 :(得分:3)
一般来说,编写一个与你想要的匹配的正则表达式比匹配你不想要的东西要容易得多。
在这种情况下,您希望“排除plip
和plop
以外的所有字词”,但为什么不仅仅包括plip
和plop
?
var input = "Hello <strong>plip</strong> plop";
var matches = Regex.Matches(input, "plip|plop");
var result = string.Join("", matches.Cast<Match>().Select(x => x.Value));
Console.Out.WriteLine(result); // prints "plipplop"
当然,既然你要求一个单行程序,你可以在没有临时变量的情况下做任何事情(并祝你下一个阅读代码的人好运!):
var result = string.Join("", Regex.Matches("Hello <strong>plip</strong> plop", "plip|plop").Cast<Match>().Select(x => x.Value));
另外,假设您的实际单词列表比plip
和plop
更复杂,您可以执行var pattern = string.Join("|", words);
之类的操作来构建模式。