我有一个列表,其中包含看起来像这样的交易数据的HS代码
trade_data = ['84 Nuclear Reactor',
'8401 Nuclear Reactor:Fuel Elem',
'840120 Isotopic Separation Machinery',
'8401200000 Isotopic Separation Machinery, Apparatus And Parts']
我要过滤此列表,以便该列表仅包含名称中具有10位数字的项目,在这种情况下为“ 8401200000同位素分离机械,设备和零件”。
我尝试了
filtered_list = [x for x in trade_data if "\d{10}" in x]
,但是代码返回一个空列表。反正有这样做吗?
答案 0 :(得分:4)
似乎您正在尝试应用正则表达式模式。您可以使用re.search
:
import re
[x for x in trade_data if re.search(r"\d{10}", x)]
# ['8401200000 Isotopic Separation Machinery, Apparatus And Parts']
或者,更好的是,预先编译模式:
p = re.compile(r"\d{10}")
[x for x in trade_data if p.search(x)]
# ['8401200000 Isotopic Separation Machinery, Apparatus And Parts']
注意
如果您需要匹配字符串开头的数字,请在模式中添加行首锚^
:r'^\d{10}'
由于它最初被标记为熊猫,因此这里是熊猫的解决方案:
s = pd.Series(trade_data)
s[s.str.contains(r'^\d{10}')]
3 8401200000 Isotopic Separation Machinery, Appa...
dtype: object
答案 1 :(得分:0)
您可以在不使用正则表达式的情况下执行以下操作:
trade_data = ['84 Nuclear Reactor',
'8401 Nuclear Reactor:Fuel Elem',
'840120 Isotopic Separation Machinery',
'8401200000 Isotopic Separation Machinery, Apparatus And Parts']
filtered_list = [i for i in trade_data if len([j for j in i if j.isdigit()])==10]
print(filtered_list) #prints ['8401200000 Isotopic Separation Machinery, Apparatus And Parts']