如果存在“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]
答案 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。这种模式。