帮我用正则表达式拆分字符串

时间:2011-01-10 10:51:52

标签: c# .net regex

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

感谢。

3 个答案:

答案 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

你可以从那里更容易地操纵它们。