以字母开头,必须包含字母和数字

4
我花了数小时来寻找一个可以匹配以下条件的正则表达式:
需要在一段文本中查找符合以下条件的字符串:
  • 以2个数字开头
  • 以空格结尾
  • 长度为7个字符且全部为字母和数字
  • 仅包含大写字母
以下是一个文本示例(需要匹配的字符串为 "159C5F"):
AT exempt acc to §§ 4 Nr. 1A UStG iVm 6 USTG
                                                                                                                            254,49/100L    977,23
159C5F Magnatec St-St 0W-30 D, 20L E4                                                                                                   0,00%
Commodity Code :

以下是我尝试的一些内容:

这里是我的几次尝试:

(?=.*[0-9])(?=.*[a-zA-Z])([a-zA-Z0-9]{6})
[0-9]{2}\S*[a-zA-Z0-9]{4}
[0-9]\S*[a-zA-Z0-9]{6}
[a-zA-Z0-9]{6}

2
我已经尝试了几个小时。请说明您到目前为止尝试了什么。另外,请解释159C5F如何遵循“确切的7位数字”规则。 - 41686d6564 stands w. Palestine
我已经添加了4个示例进行尝试,但是它们都与文本中的其他部分匹配(例如仅数字)。 - Zam89
你使用的编程语言或正则表达式风格是什么? - 41686d6564 stands w. Palestine
也添加了规则,我使用VBScript。 - Zam89
@Zam89 尝试使用 这种方式 来获取后面的内容。如果它总是在行首,你也可以将初始的 \b 替换为 ^ 以获得更好的性能,像这样 在多行模式下。 - bobble bubble
2个回答

4

如果我正确理解您的要求,您可以使用类似以下内容的东西:

\b\d\d(?=\S*?[A-Z]\S*?\s)[A-Z0-9]{4}\s

演示

一些注释:

  • 如果您不想捕获末尾的空格,可以将最后一个\s替换为前瞻(即(?=\s))。

  • 如果您只想接受ASCII空格字符而不是其他空白字符,则可以在两个位置上使用[ ]而不是\s


这很完美 :) 也许你还有解决我的下一个问题的方案: 我需要这个正则表达式来获取正确的行,但我真正需要的是该值“Magnatec St-St 0W-30 D, 20L E4”后面的描述。 所以我尝试了这个:'"(\d\d(?=\S*?[A-Z]\S*?\s)[A-Z0-9]{4}\s)(.?)+' 并获取第二个值,但它总是为空。 - Zam89
@Zam89 如果你有一个新的问题,你应该将它发布为一个新的问题 :) - 41686d6564 stands w. Palestine
will do in 90 min :) - Zam89

2

您可以使用单词边界和正向预查来断言末尾的空格但不匹配它,以获取仅 159C5F

\b\d{2}(?=[A-Z0-9]{4} )[A-Z0-9]*[A-Z][A-Z0-9]*\b
  • \b 单词边界
  • \d{2} 匹配两个数字
  • (?= 正向先行断言,断言右侧是
    • [A-Z0-9]{4} 匹配四次列表中的任意字符后跟一个空格
  • ) 关闭先行断言
  • [A-Z0-9]*[A-Z][A-Z0-9]* 匹配零次或多次 A-Z0-9,至少包含一个大写字母
  • \b 单词边界

正则表达式演示


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接