【问题标题】:Regular expression for both length with whitespaces带有空格的两个长度的正则表达式
【发布时间】:2018-03-03 11:10:18
【问题描述】:

我正在尝试编写具有以下条件的正则表达式。

  1. 允许在字符串中的任何位置为空。
  2. 前三个是字符范围 (1-3)
  3. 接下来的六个是数字(必须)-范围 (6)
  4. 下一个可选字符 - 范围 (1-3)
  5. 之后可选数字 - range(0-2)

为此,我尝试了很多东西都没有效果。

^[a-zA-Z]{1,3}[0-9]{6}[a-zA-Z]{0,3}[0-9]{0,2}

此表达式可以很好地匹配所有条件,但它不允许空字符串。提前致谢。

我只想验证“AB 123456 ADF 12”之类的字符串。 正如我提到的第一点,字符串在给定字符串的任何位置都包含空格,例如“AB 123 456 ADF 12”。

【问题讨论】:

  • 使整个事情可选并添加$锚点:^(?:[a-zA-Z]{1,3}[0-9]{6}[a-zA-Z]{0,3}[0-9]{0,2})?$。如果空字符串表示没有字符或空格的字符串,请执行以下操作:^(?:[a-zA-Z]{1,3}[0-9]{6}[a-zA-Z]{0,3}[0-9]{0,2}|\s*)$
  • 感谢您的回复。但这不允许字符之间有空格

标签: java regex


【解决方案1】:

您必须将模式括在括号中,并使用? 使其成为可选:

^(?:[a-zA-Z]{1,3}[0-9]{6}[a-zA-Z]{0,3}[0-9]{0,2})?$
  • ^ 断言字符串的开头
  • (?:非捕获组开始
    • [a-zA-Z]{1,3}[0-9]{6}[a-zA-Z]{0,3}[0-9]{0,2}你的模式
  • )? NCG 结束,可选
  • $断言字符串结束

如果要匹配带有空格字符的字符串,请添加 \\s(或 \s 处理文字)并删除 ?:

^(?:[a-zA-Z]{1,3}[0-9]{6}[a-zA-Z]{0,3}[0-9]{0,2}|\s*)$
                                                ^^^^

Live demo

更新

根据评论:

^(?:[a-zA-Z](?:\s*[a-zA-Z]){0,2}\s*\d(?:\s*\d){5}(?:\s*[a-zA-Z](?:\s*[a-zA-Z]){0,2})?\s*(?:\d\s*\d?)?)$

Live demo

【讨论】:

  • 这个正则表达式不允许我在字符或数字之间输入空格
  • 您希望正则表达式匹配哪个输入字符串?
  • 我要验证 A 123456 ABC 12
  • 每个模式之间是否只允许有一个空格,或者可以有多个?喜欢A____123456
  • 我也尝试验证多个空格
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-09
  • 1970-01-01
  • 2013-02-06
  • 1970-01-01
  • 2020-02-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多