C# 在字符串C中查找模式#
嗨,我有以下字符串模式:C# 在字符串C中查找模式#,c#,regex,string,C#,Regex,String,嗨,我有以下字符串模式: *A *BA* AB *GN*BN 我需要在输入字符串中找到这样的模式。 如果匹配,我需要相应地替换这些值 我怎么用正则表达式呢? 这里我上面展示的模式来自XML文件。所以它是动态的。 *这里表示通配符。所以 *A表示以A结尾的字符串 *BA*表示中间包含BA的字符串 AB表示精确的AB字符串 您的*通配符是表示单个字符还是可以表示多个字符?假设为单字符。还假定“通配符”仅为[A-Z] ^(AB|^[A-Z]A|^[A-Z]BA[A-Z]|^[A-Z]GN[A-Z]BN
*A
*BA*
AB
*GN*BN
我需要在输入字符串中找到这样的模式。
如果匹配,我需要相应地替换这些值
我怎么用正则表达式呢?
这里我上面展示的模式来自XML文件。所以它是动态的。
*
这里表示通配符。所以
*A
表示以A
结尾的字符串
*BA*
表示中间包含BA
的字符串
AB
表示精确的AB
字符串 您的*
通配符是表示单个字符还是可以表示多个字符?假设为单字符。还假定“通配符”仅为[A-Z]
^(AB|^[A-Z]A|^[A-Z]BA[A-Z]|^[A-Z]GN[A-Z]BN)
看起来您得到的模式已经非常接近正则表达式了,只是在
*
前面缺少了一个
,表示可以重复的是“任何东西”()
以下函数应符合您的标准
public bool CustomMatch(string input, string pattern)
{
pattern = "^" + Regex.Escape(pattern).Replace(@"\*", ".*") + "$";
return Regex.IsMatch(input, pattern);
}
看起来像是家庭作业。使用正则表达式(先使用谷歌)。@Filmzy下面给出了答案。不工作。为什么
BA
表示包含,而AB
表示精确匹配?@mlorbetske它实际上是(开始)BA(星型)。一些代码如何格式化问题。AB只是AB。你到底想替换什么?给定*AB
,是否仅更换AB
零件?给定*AB*CD
是否要将两者都替换为AB
、justCD
、AB*CD
,或者什么?您想用什么替换它们?这在某些情况下有效。不是全部。很高兴知道。谢谢。只是出于好奇,哪些模式失败了?刚刚测试了您发布的所有内容,它们似乎工作正常,提供的值中是否有前导/尾随空格?嘿,添加$不起作用。没有它,它工作得很好。在我的案例中,仍然有一两个案例失败,但我们会处理好的。谢谢
public bool CustomMatch(string input, string pattern)
{
pattern = "^" + Regex.Escape(pattern).Replace(@"\*", ".*") + "$";
return Regex.IsMatch(input, pattern);
}