CriteriaCondition={FieldName=**{**EPS**}**$MinValue=(-201)$MaxValue=(304)$TradingPeriod=(-1)}
帮助我得到第一个单词“= {”&得到下一个以“}”结尾的单词。
结果必须是:
Word1 = "CriteriaCondition"
Word2 = "FieldName={EPS}$MinValue=(-201)$MaxValue=(304)$TradingPeriod=(-1)"
使用字符串“FieldName =(EPS)$ MinValue =( - 201)$ MaxValue =(304)$ TradingPeriod =( - 1)”,帮我拆分成对:
FieldName EPS
MinValue -201
MaxValue 304
TradingPeriod -1
感谢。
答案 0 :(得分:1)
第一次拆分的正则表达式是: ^([^ =] +)= {(。*)} $
它包含: - 开始行 - 除了=(Word1)之外的任何字符的第一组 - characters = { - 字符串的剩余部分(Word2) - 人物 } - 行尾
然后,您可以将Word2拆分为由字符$分隔的部分,并将相似的正则表达式(不带{和})应用于每个部分
答案 1 :(得分:1)
这看起来像是.NET captures的工作。与许多其他正则表达式相比,.NET记住了重复捕获组的所有捕获,而不仅仅是最后一个捕获组。我没有在这里安装VS,所以我还不能测试,但请尝试以下方法:
Match match = Regex.Match(subjectString,
@"(.*?) # Match any number of characters and capture them
=\{ # Match ={
( # Match and capture the following group:
(?: # One or more occurences of the following:
(?>[^$]+) # One or more characters except $, match possessively and capture
\$? # Match the delimiting $ (optionally, because it's not there after the last item)
)+ # End of repeating group
) # End of capturing group
\} # Match }
",
RegexOptions.IgnorePatternWhitespace);
Console.WriteLine("Matched text: {0}", match.Value);
Console.WriteLine("Word1 = \"{0}\"", match.Groups[1].Value);
Console.WriteLine("Word2 = \"{0}\"", match.Groups[2].Value);
captureCtr = 0;
foreach (Capture capture in match.Groups[3].Captures) {
Console.WriteLine(" Capture {0}: {1}",
captureCtr, capture.Value);
captureCtr++;
}
答案 2 :(得分:0)
这个正则表达式可以帮助你完成大部分工作(并让你掌握你对named capture groups
感兴趣的东西。@"(?<criteria>[^=]+)\=\{((?<params>[^$]+)(\$|}))+"
但是,我假设您实际上并不关心字符串中的大量信息,所以最好彻底摆脱它,然后从那里解析字符串。
这些方面的内容非常清楚你要完成什么(如果你需要返回并对其进行更改):
var temp = "CriteriaCondition={FieldName=**{**EPS**}**$MinValue=(-201)$MaxValue=(304)$TradingPeriod=(-1)}";
var startToken = "={";
var paramString = temp.Substring( temp.IndexOf( startToken ) + startToken.Length );
var cleanParamString = Regex.Replace( paramString, @"[*{}()]", "");
var parameters = cleanParamString.Split('$');
会给你一个包含以下行的字符串数组
FieldName=EPS
MinValue=-201
MaxValue=304
TradingPeriod=-1
你可以从那里更容易地操纵它们。