在第一个字符后匹配数字

时间:2019-01-30 12:41:38

标签: regex

我想使用Regex来确定第一个字符之后的字符是否都是数字。

例如:

  • A123有效,因为在A之后只有数字
  • A12B无效,因为第一个字符后还有另一个字母

我本质上是想忽略第一个字符

我到目前为止:

(?<=A)\w*(?=)

但这使A12B或A1B2C有效,我只想要A后面的数字。

5 个答案:

答案 0 :(得分:2)

您的尝试非常复杂,尤其是考虑到您的目标多么简单。 成功使用正则表达式只是为了简单。

第一个字符可以是任何字符,因此只需使用.。 下一个全为数字,因此您需要\d。 您可以为它加注星标以指定无限制的重复,如果需要至少一个,请使用+

最后,您需要在开头和结尾处锚定正则表达式,否则它将与A123XXXXXXXXXA123之类的东西匹配。 请注意,match的大多数实现都将在末尾锚定模式,因此您可以在开始时省略插入符号。

最终正则表达式:

^.\d*$

答案 1 :(得分:2)

您不能匹配数字\D,然后匹配数字1+倍。如果这是整个字符串,则可以使用锚点来声明字符串的开始^$结束。

^\D\d+$

这将匹配:

  • ^字符串的开头
  • \D不匹配数字
  • \d+匹配1个以上的数字,确保有数字
  • $字符串的结尾

Regex demo

答案 2 :(得分:2)

我能想到的最佳解决方案是:

^.\d*$
  • ^-行首
  • .-任何字符(行终止符除外)
  • \d*
    • \d-一个数字
    • *-重复任意次(包括0次。如果希望至少为1,则将其更改为+)。
  • $-行尾

let regex = /^.\d*$/;

let testStrings = ['A123', 'A12B'];

testStrings.forEach(str => {
  console.log(`${str} is ${regex.test(str) ? 'valid' : 'invalid'}`);
});

答案 3 :(得分:0)

  

^ [a-zA-Z] [0-9] {3} $

  1. ^-“开头为”(此处以任何字母开头)。读取为^[a-zA-Z]
  2. [a-z]-任何小写字母和A-Z任何大写字母(如果需要,您可以更改。)
  3. [0-9]-任何数字
  4. {3}-描述您要检查的号码。您必须将其读为[0-9]{3}
  5. $-语句结束。 (意味着,在这种情况下,它将以3个数字结尾)

您可以在这里玩-https://regex101.com/r/mqUHvP/5

答案 4 :(得分:0)

也许

(?<=.{1,1})([0-9]+)(?=\s)

(?<=。{1,1})-之前只有一个字符

([[0-9] +)-至少一位数字

(?= \ s)-后面有一个空格

在开头添加^-指定行的开头

(?=\s)替换为$,直到行尾