我用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
组从中间开始.
-
"1234ABC3456"
不应该是成功的 -
"retour-123456-12B"
也不应该是成功的
问题是,正则表达式(?<trackingNumber>\s*[0-9]+\s*)
即使对于不只包含数字的系列也会返回成功.