Umbraco宏字符串进入KeyValuePair

时间:2013-09-11 12:37:02

标签: c# regex macros umbraco

我有一个看起来像这样的字符串:

<?UMBRACO_MACRO redirectto="/sagen.aspx" loginpage="/Login.aspx" macroAlias="BrowserValidation" />

我想得到KeyValuePair<string, string>的列表,其中键是第一部分,值是第二部分。一个例子是:

  • 键:重定向到值:/sagen.aspx
  • Key:loginpage Value:/Login.aspx
  • 键:macroAlias值:BrowserValidation

我正在考虑使用正则表达式,但说实话,我不知道从哪里开始。我知道我可以使用\"(.*?)\"来获取值,但我不知道如何获取密钥。

3 个答案:

答案 0 :(得分:1)

...试试这个:

\s(?<key>.*?)\=\"(?<value>.*?)\"

基本上,这将为您提供2个命名的捕获:

  1. - 这必须以空格开头,并且在遇到第一个="之前将是任意数量的字符
  2. - 在遇到下一个"之前,这将是任意数量的字符
  3. 你的输出将是:

    key: redirectto  ||  value: /sagen.aspx 
    key: loginpage  ||  value: /Login.aspx
    key: macroAlias  ||  value: BrowserValidation
    

    希望这可以解决问题!!

答案 1 :(得分:1)

您可以尝试以下正则表达式:

(?<=\s)([^=]+)="([^"]+)"

以下是C#中的代码:

var input = @"<?UMBRACO_MACRO redirectto=""/sagen.aspx"" loginpage=""/Login.aspx"" macroAlias=""BrowserValidation"" />";
var matches = Regex.Matches(input, @"(?<=\s)([^=]+)=""([^""]+)""");
foreach (Match match in matches) {
    Console.Write(match.Groups[1].Value);
    Console.Write(" : ");
    Console.WriteLine(match.Groups[2].Value);
}

,这是前一代码的更紧凑版本,它自动将属性名称和值对映射到字典:

var input = @"<?UMBRACO_MACRO redirectto=""/sagen.aspx"" loginpage=""/Login.aspx"" macroAlias=""BrowserValidation"" />";
var matches = Regex.Matches(input, @"(?<=\s)([^=]+)=""([^""]+)""");
var dictionary = matches.Cast<Match>()
    .Select( m => new {Key = m.Groups[1].Value, Value = m.Groups[2].Value } )
    .ToDictionary(pair => pair.Key, pair => pair.Value);
Console.WriteLine(dictionary);

Regex101 Demo

答案 2 :(得分:1)

怎么样:

static void Main()
{
    string stringToSearch = @"<?UMBRACO_MACRO redirectto=""/sagen.aspx"" loginpage=""/Login.aspx"" macroAlias=""BrowserValidation"" />";
    string pattern = @"\s(\S+)=""(.+?)""";
    var matches = Regex.Matches( stringToSearch, pattern );
    foreach( Match match in matches )
    {
        Console.WriteLine( "Key: " + match.Groups[1].ToString() + ". Value: " + match.Groups[2].ToString() );
    }
}

输出:

  

密钥:redirectto。价值:/sagen.aspx

     

键:登录页面。值:/Login.aspx

     

键:macroAlias。值:BrowserValidation

其中:

  • \ s是空白
  • \ S是非空格(假设密钥中没有空格)
  • +是1或更多。
  • 。+?意味着懒惰地而不是贪婪地匹配。
  • ()表示组,稍后在迭代组时提及。