C# Regex:Get matching和";“不匹配”;弦的部分

C# Regex:Get matching和";“不匹配”;弦的部分,c#,regex,vb.net,C#,Regex,Vb.net,我有一根这样的绳子: %1n--%2n##%12n 我需要所有匹配%1n、%2n、%12n的匹配项,还需要所有不匹配的部分。例如:--和## 我的正则表达式模式是(\d*n)(?!(\d*n)*) 我从所有不匹配的部分中获取匹配的部分(%1n,…)和空匹配项。但我的例子的结果应该是: 匹配项:%1n 匹配:-- 匹配项:%2n 匹配:## 匹配项:%12n 有人能告诉我获得预期结果的正确正则表达式模式吗?在C#中,您可以使用带有捕获括号的正则表达式的regex.Split,也可以返回匹配之间的

我有一根这样的绳子:

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

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

我从所有不匹配的部分中获取匹配的部分(%1n,…)和空匹配项。但我的例子的结果应该是:

  • 匹配项:%1n
  • 匹配:--
  • 匹配项:%2n
  • 匹配:##
  • 匹配项:%12n
  • 有人能告诉我获得预期结果的正确正则表达式模式吗?

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

    var text=“%1n--%2n##%12n”;
    var result=Regex.Split(text,@“(\w+))。其中(x=>!String.IsNullOrWhiteSpace(x)).ToList();
    foreach(结果中的var s)
    控制台。写入线(s);
    
    看。输出:

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

    另见a:


    什么是编程语言?也许你只需要
    Regex.Split(text,@“(\w+))
    (C#)或
    s.Split(/((\w+)/)
    (JS)也许
    %\d+n |.+(?=%\d+n |$)
    (?:(?!%\d+n)。+编程语言是vb.net(或C |,但不要紧)为什么你认为它应该匹配
    ?根据OP的描述和示例,我认为他们特别希望匹配
    %
    ,后面是一个数字,然后是
    n
    。否则,最好的答案一如既往:)@41686d6564这是正则表达式SO标记中的经验法则:如果有多个选项,请选择最简单的方法
    \w
    是匹配数字和字母时最简单的构造(不精确,因此我建议使用另一种模式,您的模式只是另一种)。还有,
    !string.IsNullOrWhiteSpace(x)
    可以替换为
    !string.IsNullOrEmpty(x)
    在结果中保留仅空白的项。是,
    !string.IsNullOrEmpty(x)
    x.Any()
    ,因为
    x
    在这里永远不会为空(不是
    !x.Any()
    ,就像我在现在删除的注释中写的那样;这是一个打字错误)。
    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