【问题标题】:Splitting strings with C# Regular Expressions使用 C# 正则表达式拆分字符串
【发布时间】:2022-11-30 08:46:30
【问题描述】:

我只是不知道如何根据我的特定要求获得正确的 RegEx 模式。

给出格式为“CON-ABC Industries Ltd-13098.pdf”的文件名

  • “CON-”是一个常量表达式——我匹配的文件名总是以此开头
  • 两个“-”字符之间的字符串是公司名称 - 示例中的“ABC Industries Ltd”
  • 第二个“-”字符后的整数是合同号 - 示例中的 13098
  • 文件扩展名可以是多种不同的类型——我不关心文件类型是什么

我想我已经接近获得公司名称了:
字符串模式 = @"-(.*?)-";

这将返回“-ABC Industries Ltd-”,但我无法弄清楚如何删除连字符 - 之后我可以在 C# 中对其进行操作,但更愿意在正则表达式中正确处理它。

至于合同号,这适用于给定的示例:
字符串模式 = "[0-9]+";

它正确返回“13098”,但如果公司名称包含数字,它就不起作用——我需要告诉它使用最后一次出现的整数,紧接在文件扩展名的点之前。

任何帮助深表感谢。请不要只是让我离开并阅读文档 - 我一直在 https://learn.microsoft.com/en-us/dotnet/standard/base-types/regular-expression-language-quick-reference 阅读指南,这就是我如何设法做到这一点,但现在我需要一些帮助。

【问题讨论】:

  • 你真的必须学习如何捕获字符串的一部分并访问Match.Groups
  • 你可以试试@"^CON-(?<company>.?+)-(?<contract>.?+)\.(pdf|xlsx|whatever)$"
  • 为什么不直接使用:CON-(.*)-(\d+)?这为您提供了两个捕获组(公司名称和合同编号)
  • 您在 Match 结果中看错了东西。有关一些想法,请参阅thisStack Overflow 答案。

标签: c# regex


【解决方案1】:

在线有很多很好的资源可以实时解决正则表达式问题。我个人喜欢https://regexr.com/。

使用它和您的示例文本,我构建了这个,它与您的文件名相匹配。

^CON-([^-]+)-.*$

群组是您关心的事情。公司名称在 Group[1].Value 中。

Group[0] 是整个表达式的匹配。 Group[1] 是括号中的第一部分。这可能很棘手,因此有无数的在线资源试图让它变得更容易。

希望这可以帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-23
    相关资源
    最近更新 更多