2017-08-10 72 views
0

大家好,所以我想捕捉任何以數字開頭,但由於某種原因正則表達式是不是捕捉我的表中的條目:正則表達式不捕捉數目和字符串

df 
    a 
0 Shamrock1-A 
1 Shamrock2-B 
2 
3 Q217 
4 1YR 
5 2YR 

我試圖捕捉Q217,1YR和2YR與以下正則表達式:

(Q|^\d) 

但我的正則表達式只捕捉Q217。任何幫助表示讚賞。

+0

。在你的例子沒有Q417,你的正則表達式無法捕捉到它無論如何 –

+0

@ GhilasBELHADJ我的錯誤,輸入錯誤 – codeninja

+0

您的正則表達式無法捕獲Q217 –

回答

0

正如@Ghilas BELHADJ指出的,你不能正則表達式捕獲「Q217」。但是,您可以使用正則表達式來篩選出最明顯的項目,然後進行過濾:

import re 

l = ["Shamrock1-A", "Shamrock2-B", "Q217", "1YR", "2YR"] 

new_list = [re.findall("[a-zA-Z]+[0-9]+(?!-)|[0-9][a-zA-Z]+", i) for i in l] 

final_list = [i[0] for i in new_list if i] 

輸出:

['Q217', '1YR', '2YR'] 
+0

OP正在研究一個熊貓數據框,因此,從0到5的數字不是字符串的一部分。 –

+0

@GhilasBELHADJ謝謝你指出。我編輯了我的回覆。 – Ajax1234

+0

他也試圖捕捉「Q217」。 –

0

如果您需要捕獲以數字開頭或以Q開始的任何字符串,那麼你可以做

(^(Q|\d).*) 

如果你想確保該'Q'其次是數字,你就必須

(^(Q\d+|\d.*)) 

如果你想guaruntee的東西無論是'Q'\d後居然來了,你可以做

(^(Q|\d).+) 

而且你可以後這些圖案把$,以確保在他們之後的是無疾而終(特別是如果'Q'在數字後不能有字母)

0
df = pd.DataFrame({'a': ['Shamrock1-A', 'Shamrock2-B', 'Q217', '1YR', '2YR']}) 
      a 
0 Shamrock1-A 
1 Shamrock2-B 
2   Q217 
3   1YR 
4   2YR 

df.a.str.extract('(^(Q|\d).*)')[0] 

0  NaN 
1  NaN 
2 Q217 
3  1YR 
4  2YR 
+1

爲什麼以及如何解決問題?那些能夠自己回答這些問題的人不需要別人的代碼。 – jpaugh

0

這將捕獲所有的例子,並且假設大寫字母。如果需要添加小寫字母很容易。

import re 

text = ''' 
df 
    a 
0 Shamrock1-A 
1 Shamrock2-B 
2 
3 Q217 
4 1YR 
5 2YR 
''' 

print(re.findall('[A-Z]+[0-9]+|[0-9]+[A-Z]+', text)) 
0

你的正則表達式工作正常,但你必須使用str.match

df[df['a'].str.match(r'Q|^\d')==True] # == True because of presence nan values 

輸出:

 
     a 
3 Q217 
4 1YR 
5 2YR