【问题标题】:Regex for string with quotes带引号的字符串的正则表达式
【发布时间】:2018-08-08 21:30:05
【问题描述】:

我有一个格式如下的字符串

Key1="value1" Key2="value2" Key3="value3"

我想从字符串中提取键和值。 "value" 可以包含换行、单引号、双引号等。

s = @"interactionId=""1f367d11-1f9d-4ff4-9fa3-e793dc0f7fe4"" timestamp=""2018-08-07T18:25:38.8309683Z"" textPayload=""#"" activityJson=""{
  ""type"": ""conversationUpdate"",
  ""id"": ""e3abig35e395"",
  ""timestamp"": ""2018-08-07T18:25:15.415+00:00"",
  ""localTimestamp"": ""2018-08-07T11:25:15-07:00""";

我能写这个。但是当 Value 中包含引号时它确实有效。

var ItemRegex = new Regex(@"(?<key>[^, ]+)=(?<value>[""].+?[""]|[^ ]+)", RegexOptions.Multiline);

result = 
                ItemRegex.Matches(message)
                .Cast<Match>()
                .Select(m => new
                {
                    key = m.Groups["key"].ToString().Trim('"'),
                    value = m.Groups["value"].ToString().Trim('"')
                })
                .ToDictionary(kvp => kvp.key, kvp => kvp.value);

如何转义引号?

【问题讨论】:

    标签: c# regex


    【解决方案1】:

    问题在于输入数据; activityJson 的值中包含非转义引号,因此很难确定数据的结束位置。

    如果您能够更改输入数据,那么您绝对应该这样做。

    例如,在 xml 中,双引号用 &amp;quot; 转义:

    <data attrib="value with &quot;quotes&quot;" />
    

    【讨论】:

      猜你喜欢
      • 2023-03-27
      • 2016-08-08
      • 2013-02-09
      • 2016-07-29
      • 2010-09-13
      • 1970-01-01
      • 2010-09-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多