亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何對數字后綴進行正則表達式?

如何對數字后綴進行正則表達式?

慕森王 2021-10-19 16:59:34
我有以下正則表達式(示例在 Python 中):pattern = re.compile(r'^(([a-zA-Z0-9]*[a-zA-Z]+)([\d]+)|([\d]+))$')這可以正確解析任何具有數字后綴和可選的字母數字前綴的字符串:a123a2a123123All 將正確地123視為后綴。它將正確拒絕錯誤的輸入:abc123abc()123  # Or other non-alphanumerics不過,正則表達式本身相當笨拙,因此,一些捕獲組通常是空的,這意味著我必須執行額外的步驟來過濾掉它們。我很好奇是否有比“數字或以字符結尾的字母數字開頭的數字”更好的方式來考慮這個正則表達式?
查看完整描述

2 回答

?
一只萌萌小番薯

TA貢獻1795條經驗 獲得超7個贊

您可以使用

^[A-Za-z0-9]*?([0-9]+)$

查看正則表達式演示

細節

  • ^ - 字符串的開始

  • [A-Za-z0-9]*?- 任何字母/數字,零次或多次,盡可能少(由于這種非貪婪匹配,下一個模式([0-9]+),將匹配字符串末尾的所有數字)

  • ([0-9]+) - 第 1 組:一位或多位數字

  • $ - 字符串的結尾。

在 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))


查看完整回答
反對 回復 2021-10-19
?
慕標5832272

TA貢獻1966條經驗 獲得超4個贊

如果您使用非捕獲組并正確管理重復,問題就會自行緩解。

pattern = re.compile(r'^(?:[a-zA-Z0-9]*[a-zA-Z]+)?([0-9]+)$')

后綴只有一個捕獲組(組 1),并且沒有捕獲它之前的字母數字。

或者,使用命名組是另一種選擇,它通常使長的、結構化的正則表達式更容易維護:

pattern = re.compile(r'^(?P<a>[a-zA-Z0-9]*[a-zA-Z]+)?(?P<suffix>[0-9]+)$')


查看完整回答
反對 回復 2021-10-19
  • 2 回答
  • 0 關注
  • 248 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號