Есть ли причина, по которой следующее не должно работать в .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;
}
Решение!
Оказывается, этот конфликт был на / c более старого regexbuddy, последняя версия указала наошибка для симуляции .net.
Переработанное выражение:
new Regex(@"\s?\b[a-zA-Z]+\b:\{
(?:
\b[a-zA-Z]+\b:
(?:[0-9]+|'[.,]?'|'[\w]+'),?
)+
\}",
RegexOptions.IgnorePatternWhitespace);
Несмотря на то, что это выражение не идеально из-за необходимости сделать разделитель необязательным, чтобы избежать конечного разделителяЛюбые идеи, так как, как этого избежать?