regex 正则表达式字符类中的可选额外字符

pgvzfuti  于 2022-12-24  发布在  其他
关注(0)|答案(1)|浏览(154)

我使用regex来匹配一个以XY开头的字符串,然后是9位数字,例如:

XY123456789

我使用这个正则表达式:

XY[0-9]{9}

很简单,但是现在我想在这些数字中允许一个可选的空格.
因此,正则表达式应匹配:

XY123456789
XY123 456789
XY1234567 89

我可以使用XY[0-9 ]{9,10},但是我只想允许最多一个空格,并且只有9位数,所以,正则表达式应该不匹配:

XY1234567891
XY123 456 78

因此XY([0-9] ?){9}XY[0-9] ?[0-9] ?[0-9] ?[0-9] ?[0-9] ?[0-9] ?[0-9] ?[0-9] ?[0-9]也不起作用。
有什么想法吗?有没有办法指定字符类 * 内部 * 出现的次数,比如XY[[0-9]*[ ]?]{9}
(In我的具体情况是,如果有必要,我将使用Java regex。)

drnojrws

drnojrws1#

你可以用

^XY(?!\d*\h\d*\h)(?:\d(?:\h?\d){8})$

模式匹配:

  • ^字符串开始
  • XY逐字匹配
  • (?!\d*\h\d*\h)负前瞻,Assert非2个空格
  • (?:\d(?:\h?\d){8})匹配9位数字,可选择空格
  • $字符串结束

Regex demo
在 java

String regex = "^XY(?!\\d*\\h\\d*\\h)(?:\\d(?:\\h?\\d){8})$";

相关问题