C# 使用正则表达式提取多个字符串

C# 使用正则表达式提取多个字符串,c#,regex,string,C#,Regex,String,我不熟悉正则表达式,我发现它非常混乱,所以我想要一个简单的示例,说明如何提取相同类型的多个字符串 假设我们有一个随机字符串,我想捕获被“####”包围的任何内容。因此,我假设模式如下所示: string str = "dsad###hi###vdkv324da###dog###fs"; Regex pattern = new Regex("###.+###"); 如何匹配和存储多个事件?还有一个更大的问题——在我这样做之后,我会留下“################”和“##########”

我不熟悉正则表达式,我发现它非常混乱,所以我想要一个简单的示例,说明如何提取相同类型的多个字符串

假设我们有一个随机字符串,我想捕获被“####”包围的任何内容。因此,我假设模式如下所示:

string str = "dsad###hi###vdkv324da###dog###fs";
Regex pattern = new Regex("###.+###");
如何匹配和存储多个事件?还有一个更大的问题——在我这样做之后,我会留下“################”和“##########”两个词,那么如何从中提取“hi”和“dog”

一个有效的解决方案:

{3}([^}]+){3}

#{3}      // 3 number signs, then
([^#]+)   // 1 or more characters excluding a number sign (captured as group), then
#{3}      // 3 number signs
工作解决方案:

{3}([^}]+){3}

#{3}      // 3 number signs, then
([^#]+)   // 1 or more characters excluding a number sign (captured as group), then
#{3}      // 3 number signs

这里有另一个解决方案,以及如何提取字符串部分。使用您自己的原始
Regex
版本,并获取相邻
之间的字符串


下面是另一个解决方案,以及如何提取字符串部分。使用您自己的原始
Regex
版本,并获取相邻
之间的字符串


首先,您必须定义您的需求。当你说任何被“######”包围的话时,这并不是毫不含糊的。例如,在示例字符串中,整个
hi#####vdkv324da####dog
部分位于两个
##
s之间。那么你的解决方案是什么?您是否使用了两个相邻的
###
打开和关闭部分?有一个很好的工具可以测试正则表达式:不过,请记住.NET C#正则表达式有点特定,因此一些标记可能无法工作。正则表达式并不总是最好的使用方法。在本例中,string()方法将起作用:string[]split=str.split(新字符串[]{“####”},StringSplitOptions.RemoveEmptyEntries);首先,您必须定义您的需求。当你说任何被“######”包围的话时,这并不是毫不含糊的。例如,在示例字符串中,整个
hi#####vdkv324da####dog
部分位于两个
##
s之间。那么你的解决方案是什么?您是否使用了两个相邻的
###
打开和关闭部分?有一个很好的工具可以测试正则表达式:不过,请记住.NET C#正则表达式有点特定,因此一些标记可能无法工作。正则表达式并不总是最好的使用方法。在本例中,string()方法将起作用:string[]split=str.split(新字符串[]{“####”},StringSplitOptions.RemoveEmptyEntries);啊,我现在注意到我的错误了,谢谢!啊,我现在注意到我的错误了,谢谢<代码>字符串val=mat.Value.Trim('#')更简洁。@AlexanderPetrov确实如此!我怎么没想到呢。更新答案。谢谢。
string val=mat.Value.Trim('#')更简洁。@AlexanderPetrov确实如此!我怎么没想到呢。更新答案。谢谢
foreach(Match mat in pattern.Matches(str))
{
    matched.Add(mat.Value.Trim('#'));
}