我有它由一個文本文件:添加通配符正則表達式的短語和文本匹配
- 朵朵的單詞(比如manipulat - 從「操縱」梗),並
- 朵朵詞組,通常有兩種單詞或更多(例如 「承認他認爲投資」 - 源自「承認他對投資」 )。
每個單詞/短語被呈現在一個新行。我的C#代碼讀取此文本文件中的每一行,然後爲每一行搜索DataTable中的所有行以匹配它們。即,如果一個詞/短語出現在數據表中的任何行,我的系統將標誌該行..
對於單個字,它很容易做/使用算法我有相匹配。如果它們出現在DataTable行中,我可以將「操縱」與「操縱」,「操縱」,「操縱」和「操縱」等詞語相匹配。
但是對於短語,我的算法只能匹配它的內容。在這裏,我的意思是,如果我的短語是「承認他認爲投資」,那麼它將只搜索確切的短語,並且如果在DataTable行中存在「承認他有關投資」,則它將不匹配/標記。
我對Regex和C#都沒有多少知識。我試圖修改下面的代碼來使用通配符,但到目前爲止沒有運氣。如果有人能夠幫助,我將不勝感激。先進的謝謝你。
string[] words = File.ReadAllLines(sourceDirTemp + comboBox_filename.SelectedItem.ToString() + ".txt");
var query = LoadComments().AsEnumerable().Where(r =>
words.Any(wordOrPhrase => Regex.IsMatch(r.Field<string>("Column_name"), @"\b"
+ Regex.Escape(wordOrPhrase) + @"\b", RegexOptions.IgnoreCase)));
如果您可以更改數據庫值,您可以將短語更改爲正則表達式模式,即'承認他認爲投資'變成'承認[a-z] *他認爲[a-z] *投資[a-z] *'。 –
存在一個問題:如果你只是用空格分隔'wordOrPhrase',並且給每個''添加'\ w *',你就可以將'自己'與'him'匹配(這會變成'him \ w *'。你對這個計劃? –
總之,我的建議是'Regex.IsMatch(r.Field( 「欄」),的string.join( 「+」, \t \t \t wordOrPhrase.Split(),選擇(p => string.Format(@「\ b {0} \ w * \ b」,Regex.Escape(p)))),RegexOptions.IgnoreCase)' –