扩展正则表达式

时间:2021-02-12 11:41:57

标签: regex

我想用正则表达式查找发票编号。字符串的长度超过 3 个字符。它可能包含 {., , /, _} 之类的符号,所有数字,并且可能包含一两个大写字母 - 这些字母可以单独存在或彼此紧随其后。也就是说,我目前正在尝试,但没有成功。

`([0-9-\.\\\/_]{,3})([A-Z]{0,2})?`

这里我有两个例子,应该匹配:

019S836/03717008

DR094255

这不应该匹配:

DRF094255

有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

你可以使用

^(?!(?:[^A-Z]*[A-Z]){3})(?=\D*\d)[0-9A-Z.\\\/_-]{3,}$

参见regex demo

详情

  • ^ - 字符串的开始
  • (?!(?:[^A-Z]*[A-Z]){3}) - 如果在当前位置的右侧(即从字符串的开头),出现 3 次除大写 ASCII 字母以外的零个或多个字符,则匹配失败的否定前瞻后跟一个大写 ASCII 字母
  • (?=\D*\d) - 字符串中必须至少有一位数字
  • [0-9A-Z.\\\/_-]{4,} - 出现四次或更多的数字、大写字母、.\/_-
  • $ - 字符串结束。
相关问题