正则表达式:模式以匹配任何文本,后跟特定的封闭格式

时间:2018-10-25 20:17:54

标签: c# regex

我正在尝试找到使用Regex从URL获取数据的方法,该URL的构建如下:

https://myurl.com/action?AAA={10/17/2018 08:00:00}&BBB={XXX123}&CCC={DATA_DATA}&DDD={29696}&EEE={10/17/2018 08:00:00}&FFF={CCC}&GGG={SOMEINFO}&HHH={7234384}&III={https://www.otherurl.com/Page?utm_source=email&utm_medium=medium}

我基本上希望得到的是这样的字符串列表:

AAA={10/17/2018 08:00:00}&
BBB={XXX123}&
CCC={DATA_DATA}&
DDD={29696}&
EEE={10/17/2018 08:00:00}&
FFF={CCC}&
GGG={SOMEINFO}&
HHH={7234384}&
III={https://www.otherurl.com/Page?utm_source=email&utm_medium=medium}

通过代码,我删除了第一个URL部分(https://myurl.com/action?),因此可以使用Regex.Split之类的东西来生成最终列表,但是找不到匹配模式的简单方法,它应该是这样的:

  

anything = {anything}

我尝试使用“。 = {。}”,但没有用,@“ / \ w + = {[]}”也没有运气

1 个答案:

答案 0 :(得分:4)

您可以使用

获得这些匹配项
(\w+)={([^{}]*)}

请参见regex demo

详细信息

  • (\w+)-第1组:一个或多个单词字符
  • ={-一个={子字符串
  • ([^{}]*)-第2组:除{}以外的任何0+个字符
  • }-一个}字符。

C# code example

var s = "https://myurl.com/action?\nAAA={10/17/2018 08:00:00}&\nBBB={XXX123}&\nCCC={DATA_DATA}&\nDDD={29696}&\nEEE={10/17/2018 08:00:00}&\nFFF={CCC}&\nGGG={SOMEINFO}&\nHHH={7234384}&\nIII={https://www.otherurl.com/Page?utm_source=email&utm_medium=medium}";
var res = Regex.Matches(s, @"(\w+)={([^{}]*)}")
        .Cast<Match>()
        .ToDictionary(
            m => m.Groups[1].Value,
            m => m.Groups[2].Value);
foreach (var kvp in res)
    Console.WriteLine("{0} => {1}", kvp.Key, kvp.Value);

输出:

AAA => 10/17/2018 08:00:00
BBB => XXX123
CCC => DATA_DATA
DDD => 29696
EEE => 10/17/2018 08:00:00
FFF => CCC
GGG => SOMEINFO
HHH => 7234384
III => https://www.otherurl.com/Page?utm_source=email&utm_medium=medium