正则表达式用于在两个数字之间用一个可选的逗号匹配X个数字?

贾维德·阿哈默德

我正在尝试编写一个RegExp以仅匹配8位数字,并在数字之间隐藏一个可选的逗号。

所有这些都应该匹配:

12345678
12,45678
123456,8

现在我有:

^[0-9,]{8}

但是当然会错误地匹配 012,,,67

范例:https//regex101.com/r/dX9aS9/1

我知道存在可选内容,但不了解如何将8位数字长度应用于逗号,同时又将逗号限制为1。

任何提示将不胜感激,谢谢!

维克多·史翠比维

要匹配只能包含数字和介于中间的可选逗号的8个字符字符串,可以使用

^(?=.{8}$)\d+,?\d+$

参见正则表达式演示

前瞻性要求该字符串包含8个字符。,?将使匹配逗号为可选,而+之后\d将要求在可选逗号前后至少需要一位数字。

如果需要匹配具有8位数字和可选逗号的字符串,则可以使用

^(?:(?=.{9}$)\d+,\d+|\d{8})$

参见正则表达式演示

实际上,该字符串在字符串中将有9个字符(如果有逗号),或者只有8个字符(如果只有数字)。

说明:

  • ^ -字符串开始
  • (?:(?=.{9}$)\d+,\d+|\d{8}) -2种选择:
    • (?=.{9}$)\d+,\d+ -1+个数字后跟1个逗号,然后是1+个数字,匹配的整个字符串应为9个字符长(8个数字和1个逗号)
    • | - 要么
    • \d{8} -8位数字
  • $ -字符串结尾

请参见Java代码演示(请注意,使用String#matches()模式开头和结尾处^$锚是多余的,可以省略,因为与该方法一起使用时,模式默认为锚定):

List<String> strs = Arrays.asList("0123,,678", "0123456", // bad
        "01234,567", "01234567" // good
    );
for (String str : strs)
    System.out.println(str.matches("(?:(?=.{9}$)\\d+,\\d+|\\d{8})"));

领先/尾随逗号的注意事项:

您只需要在第一个替代分支中将+匹配1个或多个匹配项)量词替换*匹配0个或多个匹配项)即可,以允许使用前导/后跟逗号:

^(?:(?=.{9}$)\d*,\d*|\d{8})$

观看此正则表达式演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

正则表达式匹配不跟一个点一个数字(“”)

正则表达式精确匹配5个数字和一个可选空格

正则表达式匹配一个数字,然后跟一个符号重复多次?

正则表达式逗号不在两个数字之间

正则表达式以匹配两个字符之间的多个数字组

SQL正则表达式-替换两个数字之间的点

什么是正则表达式,仅允许在两个字母之间或一个字母和一个数字之间但两个数字之间仅一个连字符(-)

正则表达式,用于匹配两个数字之间的字符列表

正则表达式,用于匹配两个数字之间的特殊字符

正则表达式匹配一个数字序列和一个字符。它们之间

在正则表达式中,如何删除第一个数字,后跟逗号?

查找两个数字之间的正则表达式匹配

正则表达式,用于1-31之间的数字以及数字之间的可选逗号

一个或两个数字的正则表达式模式,不属于4数字组

正则表达式匹配两个数字之间的某物

一个数字和句点后的第一个数字的正则表达式

用正则表达式分隔字母后的第一个数字

定义一个正则表达式,它两次匹配一个数字,一次匹配所有其他数字

4个数字,一个逗号和4个数字的正则表达式

正则表达式与grep或sed匹配后,如何只返回两个数字?

两个数字不相同的两个数字的正则表达式

使用正则表达式在至少一个数字后允许逗号

正则表达式匹配一个数字不是

perl正则表达式在Moses中的两个数字之间添加点的区别

正则表达式匹配一个数字

使用 R 正则表达式识别两个字符后跟一个破折号和两个数字

python正则表达式,只返回第一个数字匹配

正则表达式匹配一个数字中的 7 个相同数字,无论位置如何

正则表达式匹配两个特定字符并获取第一个数字,然后是这些字符