用于可选字母数字前缀和强制数字后缀的正则表达式
Regex for optional alphanumeric prefix and mandatory numeric suffix
我正在尝试构建一个正则表达式,其目标是遵循 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)。
注意:输入总是以数字结尾,前缀是可选的。
感谢您的帮助。
锚点在这里很重要。 ^.*?
将对零个或多个字符进行非贪婪匹配,直到 (?P<number>[0-9]+)
最后一个数字。最后一个数字被第二组捕获。
^(?P<prefix>.*?)(?P<number>[0-9]+)$
我正在尝试构建一个正则表达式,其目标是遵循 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)。
注意:输入总是以数字结尾,前缀是可选的。
感谢您的帮助。
锚点在这里很重要。 ^.*?
将对零个或多个字符进行非贪婪匹配,直到 (?P<number>[0-9]+)
最后一个数字。最后一个数字被第二组捕获。
^(?P<prefix>.*?)(?P<number>[0-9]+)$