C# 定位;列夫;串连
如果“LEV”存在,我想做一个验证。“V”是字符串中的最后一个字母 我正在寻找一个与此匹配的正则表达式:C# 定位;列夫;串连,c#,regex,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*
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$
末尾的$
表示字符串的结尾
如果要在字符串末尾匹配整个单词LEV
,请在其前面加一个\b
,这意味着单词边界
\bLEV$
让我澄清一下为什么\bLEV$
不是一个好答案
$
锚点匹配字符串的结尾,或匹配字符串中最后一个\n
字符之前的位置。见:
$
-匹配必须出现在字符串的末尾或行或字符串的末尾\n
之前
因此,要匹配字符串的最末端,必须使用\z
锚定
下一点是匹配应该出现在字符串的末尾,但是默认情况下,正则表达式引擎从左到右搜索匹配。要大大增强匹配,只需使用RegexOptions.RightToLeft
修饰符来反转字符串分析
因此,使用
var rx = new Regex(@"\bLEV\z", RegexOptions.RightToLeft);
以有效的方式在字符串的最末端查找整个单词LEV
但是,在大多数情况下,当您不需要检查子字符串是否是一个完整的单词时,您可以使用String.EndsWith()
:
另外,请注意您的LE*\D[V]
匹配:
L
-字符串中任何位置的文本L
,后跟
E*
-0+E
字符后跟
\D
-非数字字符(必需!),后跟
[V]
-一个V
字符
因此,根据这种模式,L^V
是有效的匹配。因此,LE
可以在任何地方,并且V
位于末尾?模式中的*\D
非常容易引起误解。为什么不干脆yourString.EndsWith(“LEV”)代码>?正则表达式在这方面似乎有些过分。这不是一个非常明确的问题,但我想LE*\D[V]
是您的尝试。然而,这意味着E
可以重复,并且在最后一个E
和V
之间必须有另一个字符-非数字。是哪一个?为了匹配您描述的LEV\s*$
应该做到这一点。Wiktor Stribiżew-在本文中,只有单词“LEV”而不是“LEV”。。。V@juharr正如我所说,这不是一个非常明确的问题。我把它解释为问题的开始——它应该返回真值。但是,我不确定。这不能处理尾随的空白。使用LEV\s*$
。他不需要尾随空格。参见他示例列表中的最后一个。V是字符串中的最后一个字母。请看我上面的评论。是的,$
表示字符串的结尾,但不是字符串的结尾。@WiktorStribiżew-Huh…?默认情况下,在C#中,在不更改选项的情况下,$
只匹配字符串的结尾,而不是新行。参见参考资料。@Rawling,你错了,参见。如果您不相信我或官方参考,请参阅演示。我什么都没想出来Regex.IsMatch(“Some LEV\n”、“LEV$”)
将返回true
。它实际上是一个非常奇怪的东西,它的根源是Perl正则表达式。我不知道他们为什么决定.NET flavor应该继承这种行为。谢谢你的启发。这会让我生气的:D
if (s.EndsWith("LEV")) {...}