【发布时间】: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 答案。