我有一个这样的字符串。
*>-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);
}
答案 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)
您可以使用简单的正则表达式:
(?<=\*>).*?(?=\*)
示例代码:
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();