2 回答

TA貢獻(xiàn)1795條經(jīng)驗(yàn) 獲得超7個(gè)贊
您可以使用
^[A-Za-z0-9]*?([0-9]+)$
細(xì)節(jié)
^
- 字符串的開始[A-Za-z0-9]*?
- 任何字母/數(shù)字,零次或多次,盡可能少(由于這種非貪婪匹配,下一個(gè)模式([0-9]+)
,將匹配字符串末尾的所有數(shù)字)([0-9]+)
- 第 1 組:一位或多位數(shù)字$
- 字符串的結(jié)尾。
在 Python 中:
m = re.search(r'^[A-Za-z0-9]*?([0-9]+)$') # Or, see below
# m = re.match(r'[A-Za-z0-9]*?([0-9]+)$') # re.match only searches at the start of the string
# m = re.fullmatch(r'[A-Za-z0-9]*?([0-9]+)') # Only in Python 3.x
if m:
print(m.group(1))

TA貢獻(xiàn)1966條經(jīng)驗(yàn) 獲得超4個(gè)贊
如果您使用非捕獲組并正確管理重復(fù),問題就會(huì)自行緩解。
pattern = re.compile(r'^(?:[a-zA-Z0-9]*[a-zA-Z]+)?([0-9]+)$')
后綴只有一個(gè)捕獲組(組 1),并且沒有捕獲它之前的字母數(shù)字。
或者,使用命名組是另一種選擇,它通常使長(zhǎng)的、結(jié)構(gòu)化的正則表達(dá)式更容易維護(hù):
pattern = re.compile(r'^(?P<a>[a-zA-Z0-9]*[a-zA-Z]+)?(?P<suffix>[0-9]+)$')
添加回答
舉報(bào)