我不知道如何获取C#正则表达式IsMatch
来匹配<keyword>
后跟行尾或空格。
我目前有[\s]+keyword[\s]+
适用于空格,但不适用于keyword<end of string>
或<start of string>keyword
。
我尝试了[\s^]+keyword[\s$]+
,但是这使它无法与空格匹配,并且在字符串的末尾或开头均无效。
这是我尝试的代码:
string pattern = string.Format("[\\s^]+{0}[\\s$]+",keyword);
if(Regex.IsMatch(Text, pattern, RegexOptions.IgnoreCase))
最佳答案
问题在于,字符类中的^
和$
不会被视为锚,而是视为文字字符。您可以简单地使用替换而不是字符类:
string pattern = string.Format(@"(?:\s|^){0}(?:\s|$)",keyword);
请注意,不需要
+
,因为您只想确保是否有一个空格。您不在乎是否还有更多。 ?:
只是一种很好的做法,它会取消此处不需要的capturing。并且@
使字符串成为逐字字符串,您无需在其中两次转义反斜杠。还有另一种方法,我觉得它更整洁。您可以使用lookarounds来确保关键字的左右没有空格字符(是,两次否定,考虑一下)。如果存在空格字符或字符串的一端,则此假设有效:
string pattern = string.Format(@"(?<!\S){0}(?!\S)",keyword);
这样做的效果完全相同,但是效率可能会略高一些(不过,即使有关系,您也必须对此进行分析)。
您还可以将第一个模式(具有非反向逻辑)与(正)环顾:
string pattern = string.Format(@"(?<=\s|^){0}(?=\s|$)",keyword);
但是,除非您要在一个字符串中找到多个匹配项,否则这与第一个模式并没有真正的区别。
顺便说一句,如果您的
keyword
可能包含正则表达式元字符(例如|
,$
,+
等),请确保首先使用Regex.Escape
对其进行转义。关于c# - 将<keyword>与行尾/行首的空格匹配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16213169/