如何使用 .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:有一个整数正值)。所以,让我不要检查数字格式。此外,我会考虑 *&gt;&gt; 以及 * 只是分隔符的不同变体。

我想建议以下解决方案。

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

(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

如何在 C# Regex 中使用“或”、“和”?

如何使用 REGEX 将作者拆分为对象或数组 C#?

我可以通过 java 反编译工具反编译任何用 C# 或任何其他语言编写的游戏吗?

如何将宽度和高度大小与 Regex 表达式匹配并在 SQL 或 C# 中使用 Sort By 来构建下拉列表?

何时不在 C#(或 Java、C++ 等)中使用 Regex