正则表达式找到一组字符和最多3个数字

时间:2013-06-13 03:12:47

标签: java regex

我有一个特殊情况,我需要删除一组(仅一个)字符[A-Z](仅限上限),然后是一个最多可以是3位的数字。

例如 - 来自I / P:BA1040,E123,ZA650,B12 输出应该是:仅E123和B12,我应该拒绝像A1040和A650等其他人。

如果有一个字符/数字后跟一个字符然后是数字,它也应该拒绝。例如ZA650不应该工作。如果只是A650或Z650,它会起作用。

我尝试过各种各样的事情,像[A-Z]\d+之类的简单表达也给了我错误的输出。

有人可以帮助我吗?

4 个答案:

答案 0 :(得分:2)

使用{m,n}语法指定最大或最小重复次数。既然你之前不想要一个数字或之前有一个字母,那就使用负向前瞻和后视:

(?<![A-Z])[A-Z]\d{1,3}(?!\d)

这意味着:

(?<![A-Z]) -- (Negative lookbehind) Forbid `A-Z` before the match.
[A-Z]      -- A single capital letter.
\d{1,3}    -- At least 1 digit but not more than 3.
(?!\d)     -- (Negative lookahead) Forbid digit after the match.

答案 1 :(得分:2)

使用以下正则表达式[A-Z]\d{0,3}

编辑 - ^[A-Z]\d{1,3}$如果您的搜索以A-Z开头,且至少可以1且最多3 digits

答案 2 :(得分:0)

正则表达式匹配你想要的(我认为)(字符后跟最多3位数字)是:

[A-Z][0-9]{,3}

答案 3 :(得分:0)

尝试使用单词边界

的这种模式(用java风格编写)
\\b[A-Z]\\d{1,3}\\b

有关字边界的更多信息here