我在 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
也是如此。在类似的问题中,问题是通过使用正则表达式 anchor(^, $)
解决的,但在我的例子中,我无法使用它们,因为trackingNumber
组从中间开始。
-
"1234ABC3456"
不应成功 -
"retour-123456-12B"
也不应该成功
问题在于,即使对于不只包含数字的系列,正则表达式 (?<trackingNumber>\s*[0-9]+\s*)
也会返回成功。
最佳答案
这种模式对我有用:
^(?<prefix>retour-)?\s*(?<trackingNumber>\d+)\s*(?<postfix>-(\d+))?$
1234ABC3456
retour-123456-12B
retour-123456-123
"retour-"
,跟踪编号:"123456"
,postFix:"-123"
543210-999
"543210"
,postFix:"-999"
987654
"987654"
关于C# 正则表达式,如何检查正则表达式组是否仅包含数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73440787/