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

Regular expression - starting and not ending with a pattern

如何使用正则表达式来检查字符串是否以特定模式开头并且不以特定模式结尾。

示例:

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#。

您可以使用这个基于负前瞻的正则表达式:

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

RegEx Demo

解释:

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

尝试 this.See 演示。

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

只需使用负向回顾来使 .VALUE 不在 $ 之前或字符串结尾。

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

你不需要正则表达式。你可以只使用 String.StartsWith and String.EndsWith

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

正如您在对 anubhava 的回答的评论中提到的,您也可以执行此操作以检查末尾的“.PERCENT”。

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

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