正则表达式查找非关键字

Posted

技术标签:

【中文标题】正则表达式查找非关键字【英文标题】:Regex to find non-keyword 【发布时间】:2018-08-10 10:43:15 【问题描述】:

我可以使用这样的模式来查找关键字:

//find keyword
line = @"abc class class_ def this gh static";
string Pattern;
MatchCollection M1;
Pattern = @"(?<![a-zA-Z0-9_])(class|function|static|this|return)(?![a-zA-Z0-9_])";
M1 = Regex.Matches(line, Pattern);
for (int i = 0; i < M1.Count; i++)
    output += M1[i].ToString() + '\n';

但是我怎样才能找到像abc,class_,def,gh这样的非关键字

【问题讨论】:

您尝试了哪些方法,哪些方法无效?请注意,您的正则表达式基本上是 \b(?:class|function|static|this|return)\b(如果您只需要处理 ASCII,请使用 RegexOptions.ECMAScript 选项)。 你想达到什么目的? 【参考方案1】:

我认为 RegEx 不是这个用例的好方法。

关键字不好维护,模式随着关键字的数量而增长,与Contains()相比变得更慢。

请改用string[] List&lt;string&gt;HashSet&lt;string&gt; 作为您的关键字。

string line = @"abc class class_ def this gh static";
string[] keywords =  "class", "function", "static", "this", "return" ;

string outputexclude = string.Join("\n", line.Split().Where(x => !keywords.Contains(x)));
string outputinclude = string.Join("\n", line.Split().Where(keywords.Contains));

【讨论】:

thx,在我的编译器中我需要使用ToArray() 才能成功运行

以上是关于正则表达式查找非关键字的主要内容,如果未能解决你的问题,请参考以下文章

js查找包括 "北京" 两个字的正则表达式怎么写?

Notepad++ 利用正则表达式删除关键词所在行

在 NotePad++ 中使用正则表达式查找多个关键字?

DFA算法实现关键字查找(正则原理入门)

正则表达式

python常用re正则表达式大全,查找指定内容