正则表达式提取满足指定条件的字符串

Regular expression to extract string that meets specified criteria

如果子字符串满足以下条件,我需要从一行中提取子字符串:

-以 3 开头 - 所有字符都是数字或破折号。如果全是数字那么长度从 10 个字符到 14,否则,如果包括破折号,可以到 19

我试过使用

Dim m As Match = Regex.Match(line.ToLower().Trim(), _
               "33[\d-]{10,19}", _
                  RegexOptions.IgnoreCase)

但是上面的m.Successreturns是假的

任何人都可以帮助修复我的正则表达式吗?

这个^3(?:\d{9,13}|[\d-]{9,18})$

细分:

 ^                # BOS
 3                # Starts with '3'
 (?:              # Cluster
      \d{9,13}         # All digits, total 10 - 14
   |                 # or,
      [\d-]{9,18}      # Digits or dashes, total 10 - 19
 )                # End cluster
 $                # EOS

试试这个模式

^(?=(-?\d){10,14}$)3[0-9-]{9,18}$

Demo