我写了" \{(?:!USER.)(.*?)\}"
正则表达式来识别以下格式。 '#' 代表任何字符
{!USER.####}
匹配波纹管模式的正确正则表达式是什么?但这与{!USER.####}
模式
{{!USER.NAME}} , {{!USER.PHONE}, {!USER.NAME}}
答案 0 :(得分:1)
您要放弃{!USER.XXX}
包含单个{
和}
的所有匹配项。
一个简单的解决方案是将1 + {
和}
s分成不同的组,然后检查其中任何一个的长度是否大于1.如果是,则可以抓取比赛,否则,丢弃它。
var str = "{{!USER.NAME}} , {{!USER.PHONE}, {!USER.NAME}} {!USER.####}";
var result = Regex.Matches(str, @"({+)!USER\.(.*?)(}+)")
.Cast<Match>()
.Where(x => x.Groups[1].Length > 1 || x.Groups[3].Length > 1)
.Select(m => m.Value)
.ToList();
({+)!USER\.(.*?)(}+)
模式会将1 + {
个字符捕获到第1组,匹配USER.
,然后将尽可能少地捕获到第2组任何0 +字符,直到第一个{
,其中所有出现的次数都将被捕获到第3组。.Where(x => x.Groups[1].Length > 1 || x.Groups[3].Length > 1)
行将过滤掉您不需要的行。{/ p>
答案 1 :(得分:0)
如果您想匹配,但有一些您想忽略的例外情况?
然后你可以使用负向前瞻(?!
。
在下面的正则表达式中,NAME或PHONE一词不得在点后面。
\{!USER\.(?!(?:NAME|PHONE)\})(.*?)\}