我用C#编写了以下正则表达式模式:

Regex pattern = new Regex(@"(?<prefix>retour-)?(?<trackingNumber>\s*[0-9]+\s*)(?<postfix>-([0]|[1-9]{1,2}))?");
(?<prefix>retour-)?(?<trackingNumber>\s*[0-9]+\s*)(?<postfix>-([0]|[1-9]{1,2}))?
  • 这就是我想要的:三个小组.
    • prefix组是"retour-",如果发生,它是在开始处.
    • trackingNumber组是必填项,只能由数字组成.
    • postfix组是"-",后面只跟数字,这不是必需的.
  • 我希望trackingNumber组只有在包含数字的情况下才能成功.postfix也是如此.在一个类似的问题中,问题可以通过使用正则表达式锚(^, $)来解决,但在我的例子中,我不能使用它们,因为trackingNumber组从中间开始.

For example:

  • "1234ABC3456"不应该是成功的
  • "retour-123456-12B"也不应该是成功的

问题是,正则表达式(?<trackingNumber>\s*[0-9]+\s*)即使对于不只包含数字的系列也会返回成功.

推荐答案

此模式适用于我:

^(?<prefix>retour-)?\s*(?<trackingNumber>\d+)\s*(?<postfix>-(\d+))?$
Input Result
1234ABC3456 No match
retour-123456-12B No match
retour-123456-123 prefix: "retour-", trackingNumber: "123456", postFix: "-123"
543210-999 trackingNumber: "543210", postFix: "-999"
987654 trackingNumber: "987654"

https://regex101.com/r/Fo1pvU/1

Csharp相关问答推荐

Inbox RandomizedStringHashAl算法如何帮助抵御哈希洪泛攻击?

需要多次输入的控制台应用程序

在C# 11之前, struct 中的每个字段都必须显式分配?不能繁殖

在Dapper中使用IasyncEum重写GetAsyncEum方法

我无法在Ubuntu下编译使用microsoft.extension.configurationbuilder jsonapi和mono mcs的c#应用程序

为什么我的ASP.NET核心MVC应用程序要为HTML元素添加一些标识符?

Unity中的刚体2D运动

选取器与.NET Maui MVVM的绑定属性

在静态模式下实例化配置

当前的文化决定了错误的文化

UWP应用程序try 将打包的本机.exe文件加载为C#程序集

调用Task.Run()与DoSomethingAsync()有什么不同?

取决于您的数据量的多个嵌套循环

ASP.NET Core MVC将值从视图传递到控制器时出现问题

异步任务调用程序集

如何让两个.NET版本不兼容的项目对话?

为什么Azure函数(独立工作进程)索引失败?使用Azure App配置的CosmosDbTrigger绑定失败,未解析为值

解决方案:延长ABP框架和ANGING OpenIddict中的令牌生命周期

流畅的验证--如何为属性重用规则?

使用ITfoxtec.Identity.Saml2解析相同键多值SAML 2声明