c# - 正则表达式:获取字符串的匹配部分和 "not matching"部分

标签 c# regex vb.net

我有一个像这样的字符串:

%1n--%2n##%12n

我需要与 %1n、%2n、%12n 匹配的所有匹配项,并且还需要所有不匹配的部分。例如:-- 和 ##

我的正则表达式模式是(%\d*n)(?!(%\d*n)*)

我得到了匹配的部分(%1n,...),并且还从所有不匹配的部分中得到了空匹配。但我的示例的结果应该是:

  1. 匹配:%1n
  2. 匹配:--
  3. 匹配:%2n
  4. 匹配:##
  5. 匹配:%12n

有人可以告诉我正确的正则表达式模式以获得我的预期结果吗?

最佳答案

在 C# 中,您可以使用 Regex.Split 以及用捕获括号括起来的正则表达式来返回匹配之间的所有子字符串:

var text = "%1n--%2n##%12n";
var result = Regex.Split(text, @"(%\w+)").Where(x => !String.IsNullOrWhiteSpace(x)).ToList();
foreach (var s in result)
    Console.WriteLine(s);

请参阅C# demo 。输出:

%1n
--
%2n
##
%12n

(%\w+) 正则表达式匹配并捕获到第 1 组中的一个 % 字符,然后是任何一个或多个单词字符。如果您只需要匹配 ASCII 字母/数字,请使用 (%[A-Za-z0-9]+)

查看VB.NET demo ,还有:

Dim pattern As String = "(%\w+)"
Dim s As String = "%1n--%2n##%12n"
Dim matches As String() = System.Text.RegularExpressions.Regex.Split(s, pattern)
For Each m As String In matches
    If Not String.IsNullOrEmpty(m) Then
        Console.WriteLine(m)
    End If
Next

关于c# - 正则表达式:获取字符串的匹配部分和 "not matching"部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64552675/

相关文章:

wpf - Visual Studio 2010 如何引用项目中的文件夹?

vb.net - 指数数组的边界之外

正则表达式 : Alternative to backreference in negative lookbehind

javascript - 如何匹配 RegEx/JavaScript 中出现的特定长度?

c# 按联系人状态和名称对列表中的对象进行排序

c# - 左键单击返回的 originSource 与右键单击不同

c# - 仅当使用 .NET 匹配另一个单独的过滤器时,如何执行正则表达式替换?

c# - 查找取自字符串的关键字,然后在字符串列表中查找

c# - lambda 中的 Alpha 转换

c# - 如何将新输入的项目保存到组合框项目源中?