我需要在C#中拆分一个字符串,基于空格作为分隔符并保留引号。这部分是可以的。但另外,我想允许字符串\"
使用转义符,以便在引号中包含其他引号。
我需要的示例:
One Two "Three Four" "Five \"Six\""
收件人:
- 一个
- 两个
- 三四
- 五“六”
这是我目前使用的正则表达式,它适用于除"Five \"Six\""
以外的所有情况
//Split on spaces unless in quotes
List<string> matches = Regex.Matches(input, @"[\""].+?[\""]|[^ ]+")
.Cast<Match>()
.Select(x => x.Value.Trim('"'))
.ToList();
我在找任何正则表达式,都可以。
1条答案
按热度按时间nkcskrwz1#
您可以使用
请参阅C# demo。
结果是
(?s)"(?<r>[^"\\]*(?:\\.[^"\\]*)*)"|(?<r>\S+)
正则表达式匹配(?s)
-一个RegexOptions.Singleline
等价函数,用于使.
也匹配换行符"(?<r>[^"\\]*(?:\\.[^"\\]*)*)"
-"
,然后组“r”捕获除"
和\
之外的任何零个或多个字符,然后捕获任何转义字符的零个或多个序列以及除"
和\
之外的零个或多个字符,然后匹配"
|
-或(?<r>\S+)
-“r”组:一个或多个空格。.Select(x => Regex.Replace(x.Groups["r"].Value, @"\\(.)", "$1"))
采用Group“r”值并取消转义(删除之前的\
)所有转义字符。