我有以下文字:
[atdSd [asdasd< 4REGEH22> asdosy] *** oopprefs [ew< 16REGEH30> rdtr] pppp555b
我的比赛应如下:
[asdasd<4REGEH22>asdosy]
[ew<16REGEH30>rdtr]
我试图自己制作,但结果是:
[atdSd[asdasd<4REGEH22>asdosy]
[ew<16REGEH30>rdtr]
我使用以下表达式:
\[\S+<(\d+)REGEH(\d+)>\S+\]
条件是:
[asdSd[asdasd<4REGEH23>asdUsd]
应与[asdasd<4REGEH23>asdUsd]
不应该产生匹配的示例
[atdSd [&lt; 4REGEH22&gt; asdosy] *** oopprefs [ew&lt; 16REGEH&gt; rdtr] pppp555b
如何匹配内括号?
答案 0 :(得分:1)
var st = "[atdSd[asdasd<4REGEH22>asdosy] ***oopprefs[ew<16REGEH30>rdtr]pppp555b";
List<string> result = new List<string>
(Regex.Matches(st, @"\[[^[]+REGEH.*?\]")
.Cast<Match>()
.Select(x => x.Value)
.ToList());
// [asdasd<4REGEH22>asdosy] [ew<16REGEH30>rdtr]
答案 1 :(得分:0)
这个怎么样?
\[[^\s\[]+<(\d+)REGEH(\d+)>[[^\s\[]+\]
基本上将\S
替换为[^\s\[]
,即一个否定的char类匹配不是whitepsace字符,而且至关重要的是 - 不是[
。