是否有理由不能在via .Net中使用但在RegexBuddy中有效?
字符串:
formatter:'number',formatoptions:{decimalSeparator:'.',decimalPlaces:2,defaulValue:0}
表达模式:
[a-zA-Z]+:({)??([a-zA-Z]+[:](')??[a-zA-Z0-9.,]+(?(3)'|,?),?)+(?(1)}|.)
在regex buddy中生成匹配但在.net内失败。
private static List<string> GetObjectProps(this string str, out string strWithOutObjectProps)
{
var lst = new List<String>();
var temp = str;
Regex RegexObj = new Regex("[a-zA-Z]+:({)??([a-zA-Z]+[:](')??[a-zA-Z0-9.,]+(?(3)'|,?),?)+(?(1)}|.)");
Match MatchResults = RegexObj.Match(str);
while(MatchResults.Success) //fails
{
lst.Add(MatchResults.Value);
temp = MatchResults.Index > 0
? temp.Substring(0, MatchResults.Index - 1) +
temp.Substring(MatchResults.Index + MatchResults.Length)
: temp.Substring(MatchResults.Index + MatchResults.Length);
MatchResults = MatchResults.NextMatch();
}
strWithOutObjectProps = temp;
return lst;
}
解决方案!
原来这个冲突发生在较旧的regexbuddy上,最新版本指出了.net模拟的错误。
重写表达:
new Regex(@"\s?\b[a-zA-Z]+\b:\{
(?:
\b[a-zA-Z]+\b:
(?:[0-9]+|'[.,]?'|'[\w]+'),?
)+
\}",
RegexOptions.IgnorePatternWhitespace);
虽然这个表达式不完美,但是必须使分隔符可选,以避免尾随分隔符,任何想法如何避免这种情况?
答案 0 :(得分:0)
我知道RegexBuddy模仿.NET Regex引擎。它实际上并不直接运行它。例如,限制包括lack of support for balancing groups。但是你可能偶然发现了其他一些不相容的东西。您可能需要contact them关于它或在论坛上发帖,以便他们可以查看。
作为测试,您还可以尝试使用直接从.NET Regex引擎运行的Regex Hero的正则表达式。
答案 1 :(得分:0)
经过一些调整后,这就是我想出的:
var reg = new Regex("\s+(?<name>[a-zA-Z]*)\s+:\s+(?<value>('.*')|(\".*\")|[^,}]*)");
var input = "{ decimalSeparator : \",\", decimalPlaces : 2, defaulValue : 0 }";
var matches = reg.Matches(input);
var name = matches[0].Groups["name"];
var value = matches[0].Groups["value"];
我对你想要的东西做了一些假设,所以如果他们错了就告诉我。