大家好,所以我想捕捉任何以數字開頭,但由於某種原因正則表達式是不是捕捉我的表中的條目:正則表達式不捕捉數目和字符串
df
a
0 Shamrock1-A
1 Shamrock2-B
2
3 Q217
4 1YR
5 2YR
我試圖捕捉Q217,1YR和2YR與以下正則表達式:
(Q|^\d)
但我的正則表達式只捕捉Q217。任何幫助表示讚賞。
大家好,所以我想捕捉任何以數字開頭,但由於某種原因正則表達式是不是捕捉我的表中的條目:正則表達式不捕捉數目和字符串
df
a
0 Shamrock1-A
1 Shamrock2-B
2
3 Q217
4 1YR
5 2YR
我試圖捕捉Q217,1YR和2YR與以下正則表達式:
(Q|^\d)
但我的正則表達式只捕捉Q217。任何幫助表示讚賞。
正如@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']
OP正在研究一個熊貓數據框,因此,從0到5的數字不是字符串的一部分。 –
@GhilasBELHADJ謝謝你指出。我編輯了我的回覆。 – Ajax1234
他也試圖捕捉「Q217」。 –
如果您需要捕獲以數字開頭或以Q開始的任何字符串,那麼你可以做
(^(Q|\d).*)
如果你想確保該'Q'
其次是數字,你就必須
(^(Q\d+|\d.*))
如果你想guaruntee的東西無論是'Q'
或\d
後居然來了,你可以做
(^(Q|\d).+)
而且你可以後這些圖案把$
,以確保在他們之後的是無疾而終(特別是如果'Q'
在數字後不能有字母)
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
爲什麼以及如何解決問題?那些能夠自己回答這些問題的人不需要別人的代碼。 – jpaugh
這將捕獲所有的例子,並且假設大寫字母。如果需要添加小寫字母很容易。
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))
你的正則表達式工作正常,但你必須使用str.match
即
df[df['a'].str.match(r'Q|^\d')==True] # == True because of presence nan values
輸出:
a 3 Q217 4 1YR 5 2YR
。在你的例子沒有Q417,你的正則表達式無法捕捉到它無論如何 –
@ GhilasBELHADJ我的錯誤,輸入錯誤 – codeninja
您的正則表達式無法捕獲Q217 –