我是RegEx的新手,我觉得它真的很混乱,所以我想要一个简单的例子来说明如何提取相同类型的多个字符串。
我们假设我们有一个随机字符串,我想要捕获被" ###"包围的任何内容。所以我假设模式看起来像这样:
string str = "dsad###hi###vdkv324da###dog###fs";
Regex pattern = new Regex("###.+###");
如何匹配和存储多个事件?而更重要的问题 - 在我这样做之后,我将被留下来" ### hi ###"和" ### dog ###",那么如何提取" hi"和#34;狗"从那些?
答案 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
答案 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('#'));
}