嗨,我有以下字符串模式:
*A
*BA*
AB
*GN*BN
我需要在我的输入字符串中找到这样的模式。如果匹配,我需要相应地替换这些值。
我怎么能用正则表达式呢?我上面显示的模式来自 XML 文件。所以它是动态的。
*
这里的意思是通配符。所以,
*A
表示以 . 结尾的字符串A
。
*BA*
表示介于两者之间的字符串BA
。
AB
表示确切的AB
字符串。
看起来您得到的模式已经非常接近正则表达式,只是.
在前面缺少一个*
表示可以重复的是“任何东西”(正则表达式中的重复)。
static bool PerformMatch(string rawPattern, string value)
{
var adjustedPattern = rawPattern.Replace("*", ".*");
var regex = new Regex(adjustedPattern);
var match = regex.Match(value);
return match.Success && match.Length == value.Length;
}
static void Main()
{
Console.WriteLine(PerformMatch("*BA*", "Oh?")); //false
Console.WriteLine(PerformMatch("*BA*", "BAH!")); //true
Console.ReadLine();
}
以下功能应符合您的标准。
public bool CustomMatch(string input, string pattern)
{
pattern = "^" + Regex.Escape(pattern).Replace(@"\*", ".*") + "$";
return Regex.IsMatch(input, pattern);
}
您的*
通配符是表示单个字符还是可以是多个字符?假设单个字符。还假设“通配符”[A-Z]
仅
^(AB|^[A-Z]A|^[A-Z]BA[A-Z]|^[A-Z]GN[A-Z]BN)