正则表达式排除字母数字字符

时间:2017-09-11 17:50:14

标签: regex

我认为public class MyObject : INotifyDataErrorInfo { [Required] public string Alpha { get; set; } public string Beta { get; set; } public bool HasErrors { get { return string.IsNullOrEmpty(Alpha); } } public event EventHandler<DataErrorsChangedEventArgs> ErrorsChanged; public IEnumerable GetErrors(string propertyName) { yield return propertyName; } } 排除了所有字母数字字母,但允许使用特殊字符,空格等。

使用搜索字符串[^0-9a-zA-Z]*我希望输出

[^0-9a-zA-Z]*ELL[^0-9A-Z]*

但是我也得到以下输出

ELL 
ELLs 
The ELL 
Which ELLs

如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

将*更改为+

a *表示任何金额,包括无。 A +表示一个或多个。你可能想要的是一个边界词:

\bELL\b

单词边界是\ w和\ W(非单词字符)之间的位置,或者如果字符串开头或结尾(分别)带有单词字符([0-9A-Za],则位于字符串的开头或结尾处-z_])。更多关于这一点: What is a word boundary in regexes?

答案 1 :(得分:1)

您可以使用

(?:\b|_)ELLs?(?=\b|_)

请参阅regex demo

如果它被ELL或非单词字符包围,或者在字符串的开头/结尾处,它会找到ELLs_

<强>详情:

  • (?:\b|_) - 与字边界位置(\b)或(|)a _
  • 匹配的非捕捉替代组
  • ELLs? - 匹配ELLELLs,因为s?匹配1或0 s个字符
  • (?=\b|_) - 需要在当前位置右侧显示字边界或_的正面预测。