如何使用.NET C#regex或其他任何内容提取位于*> ... *之间的文本字符串?

时间:2014-05-30 19:28:53

标签: c# string character extract between

我有一个这样的字符串。

*>-0.0532*>-0.0534*>-0.0534*>-0.0532*>-0.0534*>-0.0534*>-0.0532*>-0.0532*>-0.0534*>-0.0534*>-0.0534*>-0.0532*>-0.0534*

我想在*>*字符之间提取。

我尝试了下面这个错误的模式:

        string pattern = "\\*\\>..\\*";

        Regex rgx = new Regex(pattern, RegexOptions.IgnoreCase);
        MatchCollection matches = rgx.Matches(seriGelen);

        if (matches.Count > 0)
        {
            foreach (Match match in matches)
                MessageBox.Show("{0}", match.Value);
        }

3 个答案:

答案 0 :(得分:0)

字符串开头是否有错误?第一个号码后缺少星号? > -0.0532> -0.0534 * GT;

如果没有试试这个。

>([-+]?[0-9]*\.?[0-9]+)\*

C#代码

string strRegex = @">([-+]?[0-9]*\.?[0-9]+)\*";
Regex myRegex = new Regex(strRegex, RegexOptions.IgnoreCase | RegexOptions.Singleline);
string strTargetString = @">-0.0532>-0.0534*>-0.0534*>-0.0532*>-0.0534*>-0.0534*>-0.0532*>-0.0532*>-0.0534*>-0.0534*>-0.0534*>-0.0532*>-0.0534*";

foreach (Match myMatch in myRegex.Matches(strTargetString))
{
  if (myMatch.Success)
  {
    // Add your code here
  }
}

答案 1 :(得分:0)

看起来可能存在非常不同的值(UPD:存在整数正值)。所以,让我不要检查数字格式。另外,我会认为*>>以及 *只是分隔符的不同变体。

我想建议以下解决方案。

 (?<=[>\*])([^>\*]+?)(?=[>\*]+)   

http://regex101.com/r/mM7nK1

不确定它是否理想。仅在您的输入以分隔符开头和结尾时才有效,但是允许您使用匹配而不是 groups ,就像您的代码一样。

======

但是你知道,为什么你不能使用String.Split函数?

var toprint = seriGelen.Split(new [] {'>', '*'}, StringSplitOptions.RemoveEmptyEntries);

答案 2 :(得分:0)

您可以使用简单的正则表达式:

(?<=\*>).*?(?=\*)

Regular expression visualization

示例代码:

string text = "*>-0.0532*>-0.0534*>-0.0534*>-0.0532*>-0.0534*>-0.0534*>-0.0532*>-0.0532*>-0.0534*>-0.0534*>-0.0534*>-0.0532*>-0.0534*";
string[] values = Regex.Matches(text, @"(?<=\*>).*?(?=\*)")
                       .Cast<Match>()
                       .Select(m => m.Value)
                       .ToArray();