我写过“\{(?:!USER.)(.*?)\}"
正则表达式” “#”代表任意字符C#模式{!USER。####},{{!USER。####},{!USER。####}}的正则表达式
{!USER.####}
什么是正确的正则表达式匹配波纹管模式也?但不应该与{!USER.####}
模式相匹配
{{!USER.NAME}} , {{!USER.PHONE}, {!USER.NAME}}
我写过“\{(?:!USER.)(.*?)\}"
正则表达式” “#”代表任意字符C#模式{!USER。####},{{!USER。####},{!USER。####}}的正则表达式
{!USER.####}
什么是正确的正则表达式匹配波纹管模式也?但不应该与{!USER.####}
模式相匹配
{{!USER.NAME}} , {{!USER.PHONE}, {!USER.NAME}}
要放弃其中{!USER.XXX}
包含单个{
和}
所有比赛。
一个简单的办法是捕捉1+ {
S和}
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+字符,尽可能少,直至第一{
,其中有1次以上的事件将被捕获到组3中.行将过滤掉那些不需要的行。
它的工作原理。谢谢解释 –
如果你想匹配,但也有一些例外你想忽略吗?
然后,您可以使用负面预览(?!
。
在下面的正则表达式中,单词NAME或PHONE不能位于点的后面。
\{!USER\.(?!(?:NAME|PHONE)\})(.*?)\}
需要输出什么?尝试['{+!USER \。(。*?)} +'](http://regexstorm.net/tester?p=%7b%2b!USER%5c.%28.*%3f%29%7d %2b是I =%7B%7B!USER.NAME%7D%7D +%2C +%7B%7B!USER.PHONE%7D%2C +%7B!USER.NAME%7D%7D +)。那么,[你的正则表达式](http://regexstorm.net/tester?p=%5c%7b%28%3f%3a!USER.%29%28.*%3f%29%5c%7d&i=%7b% 7b!USER.NAME%7d%7d +%2c +%7b%7b!USER.PHONE%7d%2c +%7b!USER.NAME%7d%7d +)已经可以捕获'NAME','PHONE'和'NAME',目前还不清楚你的模式有什么问题。 –
你尝试过什么吗? – BugFinder
@WiktorStribiżew我想改变模式来识别其他格式 –