在字符串中找到“LEV”

时间:2016-03-10 12:48:15

标签: c# regex

如果存在“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]

2 个答案:

答案 0 :(得分:2)

你可以试试这个:

LEV$

最后的$表示end of string

如果您想匹配字符串末尾的整个单词LEV,请在其前面添加\b,这意味着word boundary

\bLEV$

答案 1 :(得分:1)

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

$锚点匹配字符串的结尾,或者字符串中最后一个\n之前的位置。见Anchors reference

  

$ - 匹配必须发生在字符串的末尾,或者在行或字符串末尾的\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。这种模式。