在字符串中找到“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。 这种模式。