【问题标题】:use regular expression to find substrings in c# [closed]使用正则表达式在c#中查找子字符串[关闭]
【发布时间】:2020-04-20 05:51:17
【问题描述】:

我是 c# 中正则表达式的新手,我正在尝试找出一种从用户输入字符串中提取数据的方法。到目前为止,我已经尝试使用 Regex.Matches 和 Regex.Split 但无论我尝试什么,我似乎都无法理解如何编写我的正则表达式来找到我想要的。以下是输入字符串示例:

-new -task:my task 1 -body:this is the body for task one -priority:1

我想把它分开,这样我就可以得到 :(冒号) 和 -
之间的所有内容 例如,我希望我的匹配/拆分结果之一是:我的任务 1
然后是另一个匹配项:这是任务一的主体
等等。谢谢

【问题讨论】:

  • 可能是控制台应用程序的参数吗?
  • 我会更容易在 - 上使用 string.Split,然后 - 在每个条目上 - string.Spit 再次使用 :
  • 从 regex 开始时,我建议使用一些基本教程,如 regexone.com,一旦你了解了基础,像 regex101.com 这样的简单“Edi”应该是一个很好的沙盒。

标签: c# regex string .net-core substring


【解决方案1】:

你可以在 Csharp 中使用 Match

   string input = "-new - task:my task 1 - body:this is the body for task one -priority:1";
  string pattern = @":(.*?)-";
            Match match = Regex.Match(input, pattern);
            while (match.Success)
            {
                Console.WriteLine(match.Groups[1].Value);
                match = match.NextMatch();
            }

【讨论】:

  • 这是完美的,谢谢。只是一个快速的问题。捕获组是否总是用于“捕获这些符号之间的东西”,因为到目前为止,我还没有找到真正充分解释捕获组的教程,但是你在这里使用它们的方式让我认为它们是为了匹配其他之间的表达式表达式/文字。谢谢。
  • match 中的Group 属性用于获取正则表达式匹配的组的集合。您可以从 [link] docs.microsoft.com/en-us/dotnet/api/… 了解更多信息
【解决方案2】:

这可能用正则表达式解析。但是正则表达式有缺点,虽然很漂亮。理解它有很重的认知负担。由于只输入了很少的信息(而不是一个包含大量案例的大文件,您需要转换)

而且我相信您可以完全控制将格式输入到程序中的方式。我建议你不要使用正则表达式。而只是到'-'中的一个string.split。并在遍历数组时简单地解释每个参数。

从长远来看,这应该更容易维护。因为如果您现在必须在线询问正则表达式,请考虑如果您将来必须再次维护代码会发生什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-01
    • 1970-01-01
    相关资源
    最近更新 更多