在字符串中找到“LEV”

如果存在“LEV”,我想提出一个有效的方法。 “V”是字符串中的最后一个字母。

我正在寻找像这样匹配的正则表达式:

WATER LEV answer: true TTM DAB LEV answer: true FOODS IN2 LEV answer: true RLA LEV answer: true dd LEVFF answer: false RLA LEV answer: false due to white space after "V" 

这是我尝试过的,但没有奏效:

  LE*\D[V] 

你可以试试这个:

 LEV$ 

最后的$表示end of string

如果要在字符串末尾匹配整个单词LEV在其LEV加上\b ,这意味着word boundary

 \bLEV$ 

让我澄清为什么\bLEV$不是一个好的答案。

$ anchor匹配字符串的结尾,或者字符串中最后一个字符之前的位置。 见锚点参考 :

$ – 匹配必须发生在字符串的末尾,或者在行或字符串末尾的\n之前

因此, 要匹配字符串的最后一部分,必须使用\z锚点

下一点是匹配应该发生在字符串的末尾,但正则表达式引擎默认从左到右搜索匹配。 要大大增强匹配,只需使用RegexOptions.RightToLeft修饰符来反转字符串分析。

因此,使用

 var rx = new Regex(@"\bLEV\z", RegexOptions.RightToLeft); 

以有效的方式在字符串的最末端找到整个单词LEV

但是,在大多数情况下, 当您不需要检查子字符串是否是整个单词时,您可以使用String.EndsWith()

 if (s.EndsWith("LEV")) {...} 

另请注意,您的LE*\D[V]匹配:

  • L – 字符串中的任何字符L后跟……
  • E* – 0+ E字符后跟
  • \D – 一个非数字字符(必填!)后跟
  • [V] – 一个V字符。

因此, L^V是有效匹配acc。 这种模式。