[英]Regex: get all characters after numbers
我有字符串列表,例如這樣:
ABC-2345
GGYD3495
EPF_4739
RTY-5678A
QTG138910BC
我怎樣才能得到:“2345”、“3495”、“4739”、“5678A”、“138910BC”?
基本上我想從每個字符串的數字開始獲取所有字符。
這取決於是否只有您建議的 4 位數字,那么您可以使用 0m3r 的解決方案:
([0-9]{4})
or
[0-9]+ // if number of characters varies
或者當可能還有其他字符時,則為:
\d\w*\b
\\d 以數字開頭。 \\w* 取數字后的所有字符,\\b 尋找詞邊界,基本匹配到詞尾
下面是找到第一個數字時將返回進一步字符串的代碼:
import re
inp_string = "QTG138910BC"
groups_out = re.search(r'([A-Za-z-_]+)([A-Za-z0-9]+)', inp_string)
print groups_out.groups() # ('QTG', '138910BC')
print (groups_out.group(2))
輸出:
138910BC
關聯:
請您嘗試以下操作:
import re
lst = ['ABC-2345', 'GGYD3495', 'EPF_4739', 'RTY-5678A', 'QTG138910BC']
lst = [re.sub(r'^[^0-9]*', '', l) for l in lst]
print(lst)
輸出:
['2345', '3495', '4739', '5678A', '138910BC']
正則表達式函數re.sub(r'^[^0-9]*', '', l)
從l
開頭刪除非數字字符。
您需要任意數量的非數字 ( '\\D*'
),后跟至少一位數字 ( '(.*\\d.*)'
):
import re
strings = ['ABC-2345', 'GGYD3495', 'EPF_4739', 'RTY-5678A', 'QTG138910BC']
[re.findall(r'\D*(.*\d.*)', s)[0] for s in strings]
#['2345', '3495', '4739', '138910BC']
對於每個字符串, findall
返回匹配片段的列表。 由於每個字符串中只有一個匹配的片段,因此[0]
從單項列表中選擇第一項。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.