簡體   English   中英

正則表達式:獲取數字后的所有字符

[英]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 尋找詞邊界,基本匹配到詞尾

https://regex101.com/r/KTtinh/1

下面是找到第一個數字時將返回進一步字符串的代碼:

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

關聯:

https://docs.python.org/3/library/re.html

https://www.regular-expressions.info/tutorial.html

請您嘗試以下操作:

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]從單項列表中選擇第一項。

只需執行(\\d)+ ,它就會從字符串中獲取所有數字。

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM