如何使用 .NET C# regex 或其他任何方法提取 *>...* 之间的文本字符串?
Posted
技术标签:
【中文标题】如何使用 .NET C# regex 或其他任何方法提取 *>...* 之间的文本字符串?【英文标题】:How do I extract a string of text that lies between *>...* using .NET C# regex or anything else? 【发布时间】:2014-05-30 19:28:53 【问题描述】:我有一个这样的字符串。
*>-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);
【问题讨论】:
欢迎来到 Stack Overflow!通过发布您尝试的解决方案,您做得很好,但是,如果您描述您的解决方案不起作用的原因,您会得到更好的答案 【参考方案1】:你可以使用简单的正则表达式:
(?<=\*>).*?(?=\*)
示例代码:
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();
【讨论】:
非常感谢。这种模式工作正常。【参考方案2】:看起来可能有非常不同的值(UPD:有一个整数正值)。所以,让我不要检查数字格式。此外,我会考虑 *>
和 >
, 以及 *
只是分隔符的不同变体。
我想建议以下解决方案。
(?<=[>\*])([^>\*]+?)(?=[>\*]+)
(http://regex101.com/r/mM7nK1)
不确定它是否理想。仅当您的输入以分隔符开头和结尾时才有效,但允许您使用 matches 而不是 groups,就像您的代码一样。
========
但是你知道,你为什么不使用String.Split
函数呢?
var toprint = seriGelen.Split(new [] '>', '*', StringSplitOptions.RemoveEmptyEntries);
【讨论】:
我想学习正则表达式。但是您的想法和 regex101 站点非常有帮助。谢谢@mazharenko【参考方案3】:字符串的开头是否有错误?第一个数字后缺少星号? >-0.0532>-0.0534*>
如果不试试这个。
>([-+]?[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
【讨论】:
是的,出现了复制粘贴错误。我修好了它。感谢您的回答。我会试试的。 VS 表示点 \ 的转义序列无法识别。和最后一个星号 * 我稍微修改了一下。现在它正在工作,但它返回 > 符号,如 >-0.532。我不能分开 > 符号。 @dre >([-+]?[0-9]*.?[0-9]+)* 粘贴的原始代码用于.NET。无需修改。我已经用 c# 代码更新了答案。以上是关于如何使用 .NET C# regex 或其他任何方法提取 *>...* 之间的文本字符串?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 DataAnnotations & Regex - c# - ASP.NET Core
我可以通过 java 反编译工具反编译任何用 C# 或任何其他语言编写的游戏吗?