我想用正则表达式查找发票编号。字符串的长度超过 3 个字符。它可能包含 {., , /, _} 之类的符号,所有数字,并且可能包含一两个大写字母 - 这些字母可以单独存在或彼此紧随其后。也就是说,我目前正在尝试,但没有成功。
`([0-9-\.\\\/_]{,3})([A-Z]{0,2})?`
这里我有两个例子,应该匹配:
019S836/03717008
DR094255
这不应该匹配:
DRF094255
有人可以帮我吗?
答案 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,}
- 出现四次或更多的数字、大写字母、.
、\
、/
、_
或 -
立>
$
- 字符串结束。