正则表达式 - 开始而不是以模式结束

时间:2015-01-14 15:40:12

标签: c# regex

如何设置正则表达式来检查字符串是否以某种模式开头并且不以某种模式结束。

示例:

Must StartsWith: "US.INR.USD.CONV"
Should not end with: ".VALUE"

Passes Regex: "US.INR.USD.CONV.ABC.DEF.FACTOR"
Fails Regex Check: "US.INR.USD.CONV.ABC.DEF.VALUE"

我正在使用C#。

3 个答案:

答案 0 :(得分:6)

您可以根据否定前瞻

使用此正则表达式
^US\.INR\.USD\.CONV(?!.*?\.VALUE$).*$

RegEx Demo

说明:

  • ^US\.INR\.USD\.CONV - 在输入开始时匹配US.INR.USD.CONV
  • (?!.*?\.VALUE$) - 确定行未以.value
  • 结尾的否定前瞻

答案 1 :(得分:4)

^US\.INR\.USD\.CONV.*(?<!\.VALUE)$

试试这个。看看演示。

https://regex101.com/r/fA6wE2/26

只需使用负面的lookbehind使.VALUE不在$之前或字符串结尾。

(?<!\.VALUE)$ ==>Makes sure regex engine looks behind and checks if `.VALUE` is not there when it reaches the end of string.

答案 2 :(得分:2)

你不需要正则表达式。您可以使用String.StartsWithString.EndsWith

if(val.StartsWith("US.INR.USD.CONV") && !val.EndsWith(".VALUE"))
{
    // valid 
}

正如你在对anubhava的回答中提到的那样,你可以这样做来检查&#34; .PERCENT&#34;最后也是。

if(val.StartsWith("US.INR.USD.CONV") && 
  !val.EndsWith(".VALUE") &&
  !val.EndsWith(".PERCENT"))
{
    // valid 
}

恕我直言,这使得代码更具可读性,并且几乎肯定会更快地执行。