C# 获取与指定模式不匹配的组
我正在使用C#从指定字符串中检索子字符串 我有一根这样的线: \a{Doc Title}\aDoc ID\rDoc Date\rDoc Version\rDoc Status\a:\r:\r:\r:\a{DocID}\r{DocDate}\r{DocVersion}\r{DocStatus}\a\r\n 然后我想得到“\a”“\r”“,“\a:\r:\r:\r:\a”之间的所有子字符串。。。 我已经创建了一个模式来匹配所有“\a”、“\r”,。。。如下:C# 获取与指定模式不匹配的组,c#,regex,C#,Regex,我正在使用C#从指定字符串中检索子字符串 我有一根这样的线: \a{Doc Title}\aDoc ID\rDoc Date\rDoc Version\rDoc Status\a:\r:\r:\r:\a{DocID}\r{DocDate}\r{DocVersion}\r{DocStatus}\a\r\n 然后我想得到“\a”“\r”“,“\a:\r:\r:\r:\a”之间的所有子字符串。。。 我已经创建了一个模式来匹配所有“\a”、“\r”,。。。如下: ((\\a[:]{0,1})+|(\\r
((\\a[:]{0,1})+|(\\r[:]{0,1})+)+
问题是:如何获得与上述模式不匹配的所有子字符串
预期结果是:“{Doc Title}”、“Doc ID”、“Doc Date”…首先,请缩短您的正则表达式
是{0,1}
?
只是[:]
:
(\\[ar]:?)+
。这个正则表达式允许回溯使拆分操作更难使用的内容。通过使用原子组来避免它:(?>\\[ar]:?)+
,现在您可以拆分字符串以获取所有其他字符串并过滤空字符串:
var input = @"\a{Doc Title}\aDoc ID\rDoc Date\rDoc Version\rDoc Status\a:\r:\r:\r:\a{DocID}\r{DocDate}\r{DocVersion}\r{DocStatus}\a\a\r";
var pattern = @"(?>\\[ar]:?)+";
var items = Regex.Split(input, pattern);
foreach (var item in items)
if (!string.IsNullOrWhiteSpace(item))
Console.WriteLine(item);
首先,请缩短您的正则表达式
是{0,1}
?
只是[:]
:
(\\[ar]:?)+
。这个正则表达式允许回溯使拆分操作更难使用的内容。通过使用原子组来避免它:(?>\\[ar]:?)+
,现在您可以拆分字符串以获取所有其他字符串并过滤空字符串:
var input = @"\a{Doc Title}\aDoc ID\rDoc Date\rDoc Version\rDoc Status\a:\r:\r:\r:\a{DocID}\r{DocDate}\r{DocVersion}\r{DocStatus}\a\a\r";
var pattern = @"(?>\\[ar]:?)+";
var items = Regex.Split(input, pattern);
foreach (var item in items)
if (!string.IsNullOrWhiteSpace(item))
Console.WriteLine(item);
为什么不能在正则表达式中使用否定?首先,请缩短正则表达式<代码>{0,1}是
?
[:]
只是:
。您的正则表达式的短端版本是(\\[ar]:?)+
。这个正则表达式允许回溯使拆分操作更难使用的内容。通过使用原子组来避免它:(?>\\[ar]:?)+
,现在您可以拆分字符串以获得所有其他字符串并过滤空字符串:这有帮助吗?@arunrasanth K V:因为我不知道如何正确使用它。无论如何,我从维拉·林德那里得到了答案。@维拉·林德:非常感谢@为什么不能在正则表达式中使用否定呢?首先,请缩短正则表达式<代码>{0,1}是?
[:]
只是:
。您的正则表达式的短端版本是(\\[ar]:?)+
。这个正则表达式允许回溯使拆分操作更难使用的内容。通过使用原子组来避免它:(?>\\[ar]:?)+
,现在您可以拆分字符串以获得所有其他字符串并过滤空字符串:这有帮助吗?@arunrasanth K V:因为我不知道如何正确使用它。无论如何,我从维拉·林德那里得到了答案。@维拉·林德:非常感谢@艾哈迈达布德哈米德