正则表达式用于带引号的字符串

时间:2018-08-08 21:30:06

标签: c# regex

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

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

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

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);

我如何转义引号?

1 个答案:

答案 0 :(得分:0)

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

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

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

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