Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在字符串C中查找模式#_C#_Regex_String - Fatal编程技术网

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
、just
CD
AB*CD
,或者什么?您想用什么替换它们?这在某些情况下有效。不是全部。很高兴知道。谢谢。只是出于好奇,哪些模式失败了?刚刚测试了您发布的所有内容,它们似乎工作正常,提供的值中是否有前导/尾随空格?嘿,添加$不起作用。没有它,它工作得很好。在我的案例中,仍然有一两个案例失败,但我们会处理好的。谢谢
public bool CustomMatch(string input, string pattern)
{
    pattern = "^" + Regex.Escape(pattern).Replace(@"\*", ".*") + "$";
    return Regex.IsMatch(input, pattern);
}