簡體   English   中英

C#正則表達式匹配整個單詞,帶有特殊字符

[英]C# Regex Match whole word, with special characters

我已經搜索了一些問題,但找不到確切的答案。 我需要搜索大字符串文本以查找關鍵字匹配項。 我正在使用IndexOf,但是,我需要查找整個單詞匹配項,例如,如果我搜索Java,但文本包含JavaScript,則該字符串不匹配。 使用\\ b { 模式 } \\ b可以很好地工作,但是如果我搜索類似C#的內容,那么它將無法正常工作。

以下是一些我正在搜索的文本字符串的示例:

languages include Java,JavaScript,MySql,C#
languages include Java/JavaScript/MySql/C#
languages include Java, JavaScript, MySql, C#

顯然,問題在於特殊字符“#”; 因此,這在搜索C ++時也不起作用。

使用Regex.Escape轉義模式,並使用(?<!\\w) / (?!\\w) Regex.Escape替換與上下文相關的 \\b單詞邊界:

var rx = $@"(?<!\w){Regex.Escape(pattern)}(?!\w)";

(?<!\\w)是一個否定的向后查找,如果在當前位置之前有字符串的開頭或非單詞char開頭,則匹配失敗,並且(?!\\w)是一個使匹配失敗的否定looahead如果在當前位置之后緊跟一個字符串結尾或一個非單詞char。

是的,這是因為#后面沒有單詞邊界(a \\b ),因為#不是“單詞”字符。 您可以使用如下所示的正則表達式,該正則表達式在語言之后搜索不屬於語言名稱[^a-zA-Z+#]的字符:

\b{pattern}[^a-zA-Z+#]

或者,如果你相信你可以列出所有的不屬於語言名稱的一部分可能的字符(例如,空格,. ,和; ):

[\s,.;]{pattern}[\s,.;]

或者,如果語言名稱可能位於字符串的末尾(取決於要從中獲取數據的內容),則除分隔符外,還可能需要匹配字符串$的末尾,或者類似地,字符串^的開頭。

[\s,.;]{pattern}(?:[\s,.;]|$)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM