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,…)和空匹配项。但我的例子的结果应该是:
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