正则表达式我怎样才能只得到字符串中的精确部分

Regex how can i get only exact part in a string

我应该只抓符合规则的数字。 规则:

  1. 应该是16位
  2. 前11位可以是任意数字
  3. 3位后全为零
  4. 后两位可以是任何数字。

我是这样做的;

([0-9]{11}[0]{3}[0-9]{2})

数字示例: 1234567890100012

现在我想得到数字,即使它有任何字母开头或结尾的字符串,如“abc1234567890100012abc” 我的输出应该只是像“1234567890100012”这样的数字 当我添加 [a-zA-Z]* 时,它会给出所有字符串。

还有一点是字符串的开头或结尾是否有任何数字,如“999912345678901000129999”。程序不应该接受这个。我的意思是它应该 return none 或什么都没有。我怎样才能用正则表达式写这个。

您可以使用捕获组,并匹配组前后的可选字符 a-zA-Z。

为了防止部分匹配,您可以使用单词边界 \b 或者如果字符串应该从行的开头和结尾匹配,您可以使用锚点 ^$

\b[a-zA-Z]*([0-9]{11}000[0-9]{2})[a-zA-Z]*\b

Regex demo

您可以使用环顾四周来排除数字较多的情况before/after:

(?<!\d)\d{11}000\d\d(?!\d)

regex101