正则表达式使用Python分离最后出现的数字

use*_*132 9 python regex python-2.7

我有一个正则表达式,它将数字与给定的字符串分开.

username = "testuser1"
xp = r'^\D+'
ma = re.match(xp, username)
user_prefix = ma.group(0)
print user_prefix
Run Code Online (Sandbox Code Playgroud)

输出是

testuser
Run Code Online (Sandbox Code Playgroud)

但如果用户名如下所示

username = "testuser1-1"
Run Code Online (Sandbox Code Playgroud)

我得到以下输出

testuser
Run Code Online (Sandbox Code Playgroud)

这是预料之中的.但我正在寻找以下内容

testuser1-
Run Code Online (Sandbox Code Playgroud)

基本上,正则表达式应该将最后出现的整数(不是单个数字)分开.

总结是

input = "testuser1"
>>> output = testuser
input = "testuser1-1"
>>> output = testuser1-
input = "testuser1-2000"
>>> output = testuser1-
Run Code Online (Sandbox Code Playgroud)

我可以用一个正则表达式来处理上述所有情况吗?

Psi*_*dom 6

您可以使用re.sub并查看语法:

re.sub(r'(?<=\D)\d+$', '', username)
Run Code Online (Sandbox Code Playgroud)

更短的版本:

re.sub(r'\d+$', '', username)
Run Code Online (Sandbox Code Playgroud)

sub功能更适合这种情况.

测试用例:

re.sub(r'\d+$', '', "testuser1-100")
# 'testuser1-'

re.sub(r'\d+$', '', "testuser1-1")
# 'testuser1-'

re.sub(r'\d+$', '', "testuser1")
# 'testuser'
Run Code Online (Sandbox Code Playgroud)


fab*_*gli 5

使用re.match的解决方案:

import re
username = "testuser1"
xp = r'^(.+?)\d+$'
ma = re.match(xp, username)
user_prefix = ma.groups()[0]
user_prefix
# 'testuser'

# you can also capture the last number
xp = r'^(.+?)(\d+)$'
ma = re.match(xp, username)
user_prefix, user_number = ma.groups()
user_prefix, user_number
# ('testuser', '1')

print re.match(xp, "testuser1-2000").groups()
# ('testuser1-', '2000')
re.match(xp, "testuser1-2000").groups()[0]
# 'testuser1-'
re.match(xp, "testuser1-2000").group(1)
# 'testuser1-'
Run Code Online (Sandbox Code Playgroud)