如何从字符串向量中删除单词?
How can I remove words from a vector of strings?
我是 python 的新手,我需要删除此向量中的部分文件名。
我一直在尝试类似的方法:
for x in documents:
x.replace("Sint", "")
但我无法一次完成。
我有这个向量:
documents = ['SintEstatuto1009908_17032016.rtf.txt', 'SintEstatuto16545345_15042016.rtf.txt', 'Estatuto124452336145_02052016.rtf.txt', 'SintEstatuto1645649_04042014.rtf.txt', 'MartEstatuto2592451_20072011.rtf.txt', 'Estatuto77845645858_29645615.rtf.txt', 'Estatuto149453456678_2547042016.rtf.txt', 'BrewEstatuto128634565661_14042014.rtf.txt', 'MartEstatuto11454536186_26022014.rtf.txt', 'MartEstatuto1635456456462_09042016.rtf.txt', 'SintEstatuto64565468987_22012015.rtf.txt', 'ColdEstatuto9645668602_18042016.rtf.txt', 'SintEstatuto1374534196_26032013.rtf.txt', 'SintEstatuto12964456455654040_22122008.rtf.txt', 'SintEstatuto1559914_27042016.rtf.txt', 'SintEstatuto145645152097_24042015.rtf.txt', 'MartEstatuto01064590027_21082015.rtf.txt', 'SintEstatuto1060307_04032016.rtf.txt', 'SintEstatuto8404454566046_18102014.rtf.txt', 'ColdEstatuto123545345921_30042013.rtf.txt', 'BrewEstatuto45656456791_07032015.rtf.txt', 'BrewEstatuto129754345353_29042011.rtf.txt', 'MartEstatuto1526456924_14062016.rtf.txt', 'MartEstatuto1524536924_03042014.rtf.txt', 'SintEstatuto80233287_20032016.rtf.txt', 'SintEstatuto1604998_23032015.rtf.txt', 'SintEstatuto4295435438890_22112013.rtf.txt', 'BrewEstatuto991778678639_24042014.rtf.txt', 'BrewEstatuto1330354387_1045343082011.rtf.txt']
我想删除这句话:
names = ['Sint', 'Mart', 'Cold', 'Brew']
所以我想要这个结果:
documents = ['Estatuto1009908_17032016.rtf.txt', 'Estatuto16545345_15042016.rtf.txt', 'Estatuto124452336145_02052016.rtf.txt', 'Estatuto1645649_04042014.rtf.txt', 'Estatuto2592451_20072011.rtf.txt', 'Estatuto77845645858_29645615.rtf.txt', 'Estatuto149453456678_2547042016.rtf.txt', 'Estatuto128634565661_14042014.rtf.txt', 'Estatuto11454536186_26022014.rtf.txt', 'Estatuto1635456456462_09042016.rtf.txt', 'Estatuto64565468987_22012015.rtf.txt', 'Estatuto9645668602_18042016.rtf.txt', 'Estatuto1374534196_26032013.rtf.txt', 'Estatuto12964456455654040_22122008.rtf.txt', 'Estatuto1559914_27042016.rtf.txt', 'Estatuto145645152097_24042015.rtf.txt', 'Estatuto01064590027_21082015.rtf.txt', 'Estatuto1060307_04032016.rtf.txt', 'Estatuto8404454566046_18102014.rtf.txt', 'Estatuto123545345921_30042013.rtf.txt', 'Estatuto45656456791_07032015.rtf.txt', 'Estatuto129754345353_29042011.rtf.txt', 'Estatuto1526456924_14062016.rtf.txt', 'Estatuto1524536924_03042014.rtf.txt', 'Estatuto80233287_20032016.rtf.txt', 'Estatuto1604998_23032015.rtf.txt', 'Estatuto4295435438890_22112013.rtf.txt', 'Estatuto991778678639_24042014.rtf.txt', 'Estatuto1330354387_1045343082011.rtf.txt']
我该怎么做?
您可以构建要删除的关键字的正则表达式替换,然后使用 re.sub
:
names = ['Sint', 'Mart', 'Cold', 'Brew']
regex = r'^(?:' + r'|'.join(names) + r')'
documents = ['SintEstatuto1009908_17032016.rtf.txt', 'SintEstatuto16545345_15042016.rtf.txt', 'Estatuto124452336145_02052016.rtf.txt', 'SintEstatuto1645649_04042014.rtf.txt', 'MartEstatuto2592451_20072011.rtf.txt', 'Estatuto77845645858_29645615.rtf.txt', 'Estatuto149453456678_2547042016.rtf.txt', 'BrewEstatuto128634565661_14042014.rtf.txt', 'MartEstatuto11454536186_26022014.rtf.txt', 'MartEstatuto1635456456462_09042016.rtf.txt', 'SintEstatuto64565468987_22012015.rtf.txt', 'ColdEstatuto9645668602_18042016.rtf.txt', 'SintEstatuto1374534196_26032013.rtf.txt', 'SintEstatuto12964456455654040_22122008.rtf.txt', 'SintEstatuto1559914_27042016.rtf.txt', 'SintEstatuto145645152097_24042015.rtf.txt', 'MartEstatuto01064590027_21082015.rtf.txt', 'SintEstatuto1060307_04032016.rtf.txt', 'SintEstatuto8404454566046_18102014.rtf.txt', 'ColdEstatuto123545345921_30042013.rtf.txt', 'BrewEstatuto45656456791_07032015.rtf.txt', 'BrewEstatuto129754345353_29042011.rtf.txt', 'MartEstatuto1526456924_14062016.rtf.txt', 'MartEstatuto1524536924_03042014.rtf.txt', 'SintEstatuto80233287_20032016.rtf.txt', 'SintEstatuto1604998_23032015.rtf.txt', 'SintEstatuto4295435438890_22112013.rtf.txt', 'BrewEstatuto991778678639_24042014.rtf.txt', 'BrewEstatuto1330354387_1045343082011.rtf.txt']
output = [re.sub(regex, '', x) for x in documents]
print(output)
这会打印:
['Estatuto1009908_17032016.rtf.txt', 'Estatuto16545345_15042016.rtf.txt',
'Estatuto124452336145_02052016.rtf.txt', ..., 'Estatuto1330354387_1045343082011.rtf.txt']
一种选择是使用 removeprefix
:
from functools import reduce
out = [reduce(lambda x, y: x.removeprefix(y), names, item) for item in documents]
具有显式循环的相同代码:
out = []
for item in documents:
for name in names:
item = item.removeprefix(name)
out.append(item)
我是 python 的新手,我需要删除此向量中的部分文件名。
我一直在尝试类似的方法:
for x in documents:
x.replace("Sint", "")
但我无法一次完成。
我有这个向量:
documents = ['SintEstatuto1009908_17032016.rtf.txt', 'SintEstatuto16545345_15042016.rtf.txt', 'Estatuto124452336145_02052016.rtf.txt', 'SintEstatuto1645649_04042014.rtf.txt', 'MartEstatuto2592451_20072011.rtf.txt', 'Estatuto77845645858_29645615.rtf.txt', 'Estatuto149453456678_2547042016.rtf.txt', 'BrewEstatuto128634565661_14042014.rtf.txt', 'MartEstatuto11454536186_26022014.rtf.txt', 'MartEstatuto1635456456462_09042016.rtf.txt', 'SintEstatuto64565468987_22012015.rtf.txt', 'ColdEstatuto9645668602_18042016.rtf.txt', 'SintEstatuto1374534196_26032013.rtf.txt', 'SintEstatuto12964456455654040_22122008.rtf.txt', 'SintEstatuto1559914_27042016.rtf.txt', 'SintEstatuto145645152097_24042015.rtf.txt', 'MartEstatuto01064590027_21082015.rtf.txt', 'SintEstatuto1060307_04032016.rtf.txt', 'SintEstatuto8404454566046_18102014.rtf.txt', 'ColdEstatuto123545345921_30042013.rtf.txt', 'BrewEstatuto45656456791_07032015.rtf.txt', 'BrewEstatuto129754345353_29042011.rtf.txt', 'MartEstatuto1526456924_14062016.rtf.txt', 'MartEstatuto1524536924_03042014.rtf.txt', 'SintEstatuto80233287_20032016.rtf.txt', 'SintEstatuto1604998_23032015.rtf.txt', 'SintEstatuto4295435438890_22112013.rtf.txt', 'BrewEstatuto991778678639_24042014.rtf.txt', 'BrewEstatuto1330354387_1045343082011.rtf.txt']
我想删除这句话:
names = ['Sint', 'Mart', 'Cold', 'Brew']
所以我想要这个结果:
documents = ['Estatuto1009908_17032016.rtf.txt', 'Estatuto16545345_15042016.rtf.txt', 'Estatuto124452336145_02052016.rtf.txt', 'Estatuto1645649_04042014.rtf.txt', 'Estatuto2592451_20072011.rtf.txt', 'Estatuto77845645858_29645615.rtf.txt', 'Estatuto149453456678_2547042016.rtf.txt', 'Estatuto128634565661_14042014.rtf.txt', 'Estatuto11454536186_26022014.rtf.txt', 'Estatuto1635456456462_09042016.rtf.txt', 'Estatuto64565468987_22012015.rtf.txt', 'Estatuto9645668602_18042016.rtf.txt', 'Estatuto1374534196_26032013.rtf.txt', 'Estatuto12964456455654040_22122008.rtf.txt', 'Estatuto1559914_27042016.rtf.txt', 'Estatuto145645152097_24042015.rtf.txt', 'Estatuto01064590027_21082015.rtf.txt', 'Estatuto1060307_04032016.rtf.txt', 'Estatuto8404454566046_18102014.rtf.txt', 'Estatuto123545345921_30042013.rtf.txt', 'Estatuto45656456791_07032015.rtf.txt', 'Estatuto129754345353_29042011.rtf.txt', 'Estatuto1526456924_14062016.rtf.txt', 'Estatuto1524536924_03042014.rtf.txt', 'Estatuto80233287_20032016.rtf.txt', 'Estatuto1604998_23032015.rtf.txt', 'Estatuto4295435438890_22112013.rtf.txt', 'Estatuto991778678639_24042014.rtf.txt', 'Estatuto1330354387_1045343082011.rtf.txt']
我该怎么做?
您可以构建要删除的关键字的正则表达式替换,然后使用 re.sub
:
names = ['Sint', 'Mart', 'Cold', 'Brew']
regex = r'^(?:' + r'|'.join(names) + r')'
documents = ['SintEstatuto1009908_17032016.rtf.txt', 'SintEstatuto16545345_15042016.rtf.txt', 'Estatuto124452336145_02052016.rtf.txt', 'SintEstatuto1645649_04042014.rtf.txt', 'MartEstatuto2592451_20072011.rtf.txt', 'Estatuto77845645858_29645615.rtf.txt', 'Estatuto149453456678_2547042016.rtf.txt', 'BrewEstatuto128634565661_14042014.rtf.txt', 'MartEstatuto11454536186_26022014.rtf.txt', 'MartEstatuto1635456456462_09042016.rtf.txt', 'SintEstatuto64565468987_22012015.rtf.txt', 'ColdEstatuto9645668602_18042016.rtf.txt', 'SintEstatuto1374534196_26032013.rtf.txt', 'SintEstatuto12964456455654040_22122008.rtf.txt', 'SintEstatuto1559914_27042016.rtf.txt', 'SintEstatuto145645152097_24042015.rtf.txt', 'MartEstatuto01064590027_21082015.rtf.txt', 'SintEstatuto1060307_04032016.rtf.txt', 'SintEstatuto8404454566046_18102014.rtf.txt', 'ColdEstatuto123545345921_30042013.rtf.txt', 'BrewEstatuto45656456791_07032015.rtf.txt', 'BrewEstatuto129754345353_29042011.rtf.txt', 'MartEstatuto1526456924_14062016.rtf.txt', 'MartEstatuto1524536924_03042014.rtf.txt', 'SintEstatuto80233287_20032016.rtf.txt', 'SintEstatuto1604998_23032015.rtf.txt', 'SintEstatuto4295435438890_22112013.rtf.txt', 'BrewEstatuto991778678639_24042014.rtf.txt', 'BrewEstatuto1330354387_1045343082011.rtf.txt']
output = [re.sub(regex, '', x) for x in documents]
print(output)
这会打印:
['Estatuto1009908_17032016.rtf.txt', 'Estatuto16545345_15042016.rtf.txt',
'Estatuto124452336145_02052016.rtf.txt', ..., 'Estatuto1330354387_1045343082011.rtf.txt']
一种选择是使用 removeprefix
:
from functools import reduce
out = [reduce(lambda x, y: x.removeprefix(y), names, item) for item in documents]
具有显式循环的相同代码:
out = []
for item in documents:
for name in names:
item = item.removeprefix(name)
out.append(item)