3

我需要一个只允许字母数字字符并删除某些完整单词的正则表达式。

例子:

输入字符串:this-is-johny-bravo's-grand-dad

结果字符串:johny-bravos-dad

用空字符串替换的单词/字符:this,is,',grand

这是我到目前为止所拥有的:

var input = "this-is-johny-bravo's-grand-dad";
var regex = new Regex(@"([^a-z0-9\-][\b(this|is|grand)\b]?)");
var result = regex.Replace(input, "");

结果似乎没有撇号,但不幸的是仍然包括被拒绝的全词。

4

2 回答 2

3

您还需要将字符类添加到交替中:

new Regex(@"\b(this|is|grand)\b-?|[^a-z0-9-]");
于 2013-10-21T16:02:45.560 回答
3

你的表达方式太复杂了。尝试

\b(这|是|盛大|')\b-?

此外,这也是您的问题的根本原因:字符类不用于交替。这[\b(this|is|grand)\b]在语法上等同于 this [()adghinrst|]

想一想,你可能想要这个:

(\b(this|is|grand)\b|[^a-z0-9-])-?

分解:

( # 第一组
    \b(this|is|grand)\b # 这些词中的任何一个
    | # 或者
    [^a-z0-9-] # 除了其中一个字符之外的任何字符
) # 结束组 1
-?# 最后的可选破折号
于 2013-10-21T16:04:53.920 回答