簡體   English   中英

如何從python中的字符串中提取一定長度的數字? [重復]

[英]How to extract certain length of numbers from a string in python? [duplicate]

我有一個看起來像這樣的數據框:

description     
1906 RES 330 ML
1906 RES 330ML
RES 335 c/6
RES 332 c/12

我想提取數字的三個連續數字並將其保存在新的“音量”列中。 我的代碼是這樣的:

df['volume'] = df['description'].str.extract('([([\d]*[\d]){3,3}?])')

預期結果應該是這樣的:

volume
330
330
335
332

但是,它給出了這樣的結果:

volume
1906
1906
335
332

誰能幫我修復這個代碼? 非常感謝!!!

可能有點矯枉過正,但如果您想確保不捕獲屬於 4 位數字的數字,您可以使用以下命令:

df['volume'] = df.description.str.extract(r'(?<!\d)(\d{3})(?!\d)', expand=False)    
print(df)

       description volume
0  1906 RES 330 ML    330
1   1906 RES 330ML    330
2      RES 335 c/6    335
3     RES 332 c/12    332

指定expand=False ,以便匹配僅作為一個pd.Series返回。


正則表達式:

  • (?<!\\d) - 指定在一組 3 位數字之前的任何東西都不是數字
  • (\\d{3}) - 匹配 3 個數字
  • (?!\\d) - 指定一組 3 位數字之后的任何內容都不是數字

你需要

  • 不匹配任何數字,三次,所以刪除[\\d]*
  • 不匹配任何看起來像“單詞”的 3 位數字,
    尤其不是其他數字,所以使用詞邊界\\b
  • 不允許可選?
  • 不要過分字符集的事情[]

您不需要:

  • 使用兩個捕獲組()

此正則表達式將僅找到三位數字:

\b(\d{3})\b

您正在尋找的正則表達式是\\b[\\d]{3}\\b

有關\\b更多信息,請參閱文檔

暫無
暫無

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

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