使用Regex提取多个字符串

时间:2017-08-19 15:59:39

标签: c# regex string

我是RegEx的新手,我觉得它真的很混乱,所以我想要一个简单的例子来说明如何提取相同类型的多个字符串。

我们假设我们有一个随机字符串,我想要捕获被" ###"包围的任何内容。所以我假设模式看起来像这样:

string str = "dsad###hi###vdkv324da###dog###fs";
Regex pattern = new Regex("###.+###");

如何匹配和存储多个事件?而更重要的问题 - 在我这样做之后,我将被留下来" ### hi ###"和" ### dog ###",那么如何提取" hi"和#34;狗"从那些?

2 个答案:

答案 0 :(得分:2)

工作解决方案:

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

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

Demo

答案 1 :(得分:1)

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

string str = "dsad###hi###vdkv324da###dog###fs###d###";
Regex pattern = new Regex("###.+?###");

List<string> matched = new List<string>();
foreach(Match mat in pattern.Matches(str))
{
    string val = mat.Value;
    int start = val.IndexOf("###") + 3;
    int len = val.LastIndexOf("###") - start;
    matched.Add(val.Substring(start, len));
}

更新:更简洁的字符串提取:

foreach(Match mat in pattern.Matches(str))
{
    matched.Add(mat.Value.Trim('#'));
}