我有两个数据表dtRosterList和falsefields 我想列出所有针对假域的列表,其中列列值是一个句子“你好我是一个字段列表”和假字段列值有一个字符串“字段”...我匹配Regex.IsMatch
Regex.IsMatch(r.Field<string>("ListName"),@"\bFacebook Link\b")
在Visual Studio中间窗口中返回true但是 在Linq查询本身中,Regex.IsMatch(r.Field(“ListName”),@“\ b”+ fn +“\ b”)出现错误,我没有得到任何行......查询如下:
var listTobeDeleted = dtRosterList.AsEnumerable().
Where(r => falsefields.AsEnumerable()
.Select(f => f.Field<string>("FieldName")).Any(fn => Regex.Match(r.Field<string>("ListName"),@"\b"+fn+"\b",RegexOptions.IgnoreCase))).CopyToDataTable();
答案 0 :(得分:2)
您的代码有两个问题:
Regex.Match
代替Regex.IsMatch
; @
字符串上的"\b"
verbatim string literal前缀;
\
(ASCII代码92)和b
(ASCII代码98)。正则表达式引擎将此解释为&#34;匹配必须发生在字母数字和非字母数字字符之间的边界上。。我还倾向于在单词周围添加a Regex.Escape
call以查找,以防它包含任何特殊字符。
var listTobeDeleted = dtRosterList.AsEnumerable()
.Where(r => falsefields.AsEnumerable()
.Select(f => f.Field<string>("FieldName"))
.Any(fn => Regex.IsMatch(r.Field<string>("ListName"), @"\b" + Regex.Escape(fn) + @"\b", RegexOptions.IgnoreCase)))
.CopyToDataTable();