Skip to main content
 首页 » 编程设计

c#之c#中保留字符的正则表达式问题

2024年01月25日25jpfss

我有一个有效的正则表达式,它扫描一大块文本以查找在数据库中定义的关键字列表。我从数据库动态创建我的正则表达式来得到这个:

\b(?:keywords|from|database|with|esc\@ped|characters|\@ss|gr\@ss)\b 

注意特殊字符被转义了。这适用于绝大多数情况,除非关键字的第一个字符是正则表达式特殊字符,如 @ 或 $。所以在上面的例子中,@ss 不会被匹配,但是 gr@ss 和 esc@ped 会。

有什么想法可以让这个正则表达式适用于这些特殊情况吗?我尝试过转义和不转义正则表达式字符串中的特殊字符,但无济于事。

提前致谢

大卫

请您参考如下方法:

new Regex(@"(?<=^|\W)(?:keywords|from|database|with|esc@ped|characters|@ss|gr@ss)(?=\W|$)") 

将匹配。它检查要匹配的关键字前后是否有非单词字符(或字符串的开头/结尾)。我选择 \W 而不是 \s 因为标点符号和其他可能构成单词边界的非单词字符。

编辑:甚至更好(感谢 Alan Moore!- 两个版本将产生相同的结果):

new Regex(@"(?<!\w)(?:keywords|from|database|with|esc@ped|characters|@ss|gr@ss)(?!\w)") 

两者都无法匹配 l@ss 中的 @ass,这可能正是您想要的。