我有一个像这样的字符串:
%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+)").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/