Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取与指定模式不匹配的组_C#_Regex - Fatal编程技术网

C# 获取与指定模式不匹配的组

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

我正在使用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[:]{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:因为我不知道如何正确使用它。无论如何,我从维拉·林德那里得到了答案。@维拉·林德:非常感谢@艾哈迈达布德哈米德