【问题标题】:Java Regex Pattern with atleast one letter至少一个字母的 Java 正则表达式模式
【发布时间】:2015-01-14 06:43:03
【问题描述】:

我正在尝试从文本中提取字母数字序列。此序列的长度可以是五个或六个字符,必须以数字开头和结尾,并且中间至少有一个字母,例如:25D2124WX078FZW52T784、@987654326 @

这是我整理出来的

[0-9][[0-9]|[a-zA-Z]]{3,4}[0-9]

这个解决方案的问题是它也匹配

888888(至少不满足一个字符限制)

【问题讨论】:

  • 请考虑将Stack Overflow Regular Expressions FAQ 加入书签以供将来参考。
  • 你可以在应用你的模式之后检查字符串是否包含一个字母。
  • @alliteralmind 感谢您提供参考链接。我相信它会派上用场的。
  • @phobic 目前将其用作解决方法

标签: java regex


【解决方案1】:

概括
根据排列(如下),它看起来可以推广到这个

 # (?i)\d(?=\d{0,3}[a-z])[a-z\d]{3,4}\d

 (?i)
 \d                   # A digit
 (?= \d{0,3} [a-z] )  # a letter in the next 1 to 4 characters
 [a-z\d]{3,4}         # 3 to 4 digits or letters
 \d                   # A digit

排列

 # (?i)\d(?:[a-z][a-z\d]{2,3}|\d[a-z][a-z\d]{1,2}|\d\d[a-z][a-z\d]{0,1}|\d\d\d[a-z])\d

 (?i)
 \d 
 (?:
      [a-z] 
      [a-z\d]{2,3} 
   |  
      \d 
      [a-z] 
      [a-z\d]{1,2} 
   |  
      \d\d 
      [a-z] 
      [a-z\d]{0,1} 
   |  
      \d\d\d 
      [a-z] 
 )
 \d

输入

for example: 25D212, 4WX07, 8FZW5, 2T784, 25XR47

输出

 **  Grp 0 -  ( pos 13 , len 6 ) 
25D212  

 **  Grp 0 -  ( pos 21 , len 5 ) 
4WX07  

 **  Grp 0 -  ( pos 28 , len 5 ) 
8FZW5  

 **  Grp 0 -  ( pos 28 , len 5 ) 
8FZW5  

 **  Grp 0 -  ( pos 42 , len 6 ) 
25XR47  

【讨论】:

    【解决方案2】:

    你可以用一种正则表达式模式解决这个问题,但你肯定可以用两种模式解决它。

    第一个模式类似于:

    \d[0-9a-zA-Z]{3,4}\d
    

    (注:\d[0-9] 相同)

    第二种模式是这样的:

    \d+[a-zA-Z]+\d+
    

    第一个模式控制字符串的大小,第二个模式确认它至少包含一个字母字符。

    测试 Java 正则表达式模式的好资源:http://www.regexplanet.com/advanced/java/index.html

    看起来 Avinash Raj 的帖子是正确答案。我将保留我的选项(可能不是最理想的)

    【讨论】:

      【解决方案3】:

      @Avinash Raj 已经有了一个好看的模式,但我想分享我的替代方案:

      \b(?=[0-9a-zA-Z]{5,6}\b)\d.*[a-zA-Z].*\d\b
      

      如果将其拆分为测试 5-6 个字母数字字符串的前瞻断言和测试格式的实际模式(以数字开头和结尾),这可能更容易阅读并在中间某处有一个字母)。这大致对应于您最初提出问题的方式,因此可能更容易阅读和记住“this 到底是做什么的?”

      【讨论】:

      • 主赛会因为.*而被淘汰
      • @nhahtdh 实际上不会。你甚至尝试过吗?前瞻断言验证所有字符都是字母数字。此模式不匹配,例如1#,W89
      • regex101.com/r/iK3iE4/102344 sf4 失败一旦你设法通过断言,所有的地狱都会崩溃。
      • 该死的。好吧,我的错。谢谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-24
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 2022-11-24
      相关资源
      最近更新 更多