正则表达式可选的字母数字前缀和必需的数字后缀

时间:2015-02-23 15:09:54

标签: regex alphanumeric digit

我正在尝试构建一个正则表达式,其目标是遵循3条规则:

(1)如果输入是字母数字,并且可以将其拆分为包含字母和数字的两个组,则字母为前缀,数字为后缀。例如:

输入:ABC123

输出:前缀= ABC,后缀= 123

(2)如果输入只是数字,则没有前缀,只有后缀。     例如:

输入:123

输出:前缀='',后缀= 123

(3)如果输入是字母数字混合,则输入末尾的所有数字都是后缀,所有其他字符都是前缀

输入:A9B9C123

输出:前缀= A9B9C,后缀= 123


到目前为止我已尝试过这个:

"(?P<prefix>\D*)(?P<suffix>\d*)"

这符合规则(1)和(2)但不符合(3)。

"(?P<prefix>.*)(?P<suffix>[0-9]+)"

这符合规则(3),但违反了规则(1)和(2)。

注意:输入始终以数字结尾,前缀是可选的。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

锚点在这里必不可少。 ^.*?将执行零或多个字符的非贪婪匹配,直到(?P<number>[0-9]+)最后一个数字。最后一个号码由第二组捕获。

^(?P<prefix>.*?)(?P<number>[0-9]+)$

DEMO