【问题标题】:How do I remove a list of words from a paragraph?如何从段落中删除单词列表?
【发布时间】:2020-01-28 20:09:13
【问题描述】:

我想从段落中删除单词列表。所以我创建了我想要删除的列表

fitlerWords= ['Cage','Contract','Number','Quantity','Unit','Cost','AWD','Date','CONTINUED',
 'SECTION', 'Procurement','history','For','on','Next','Page','Continuation','Sheet',
'Reference','of','Document','Being','CONTINUED','pages','SECTION']

如果存在的话,我想从这句话中删除上面的单词

015536159/6630 CAGE Contract Number Quantity Unit Cost AWD Date 32YK1 SPE2DH19P0522 22.000 1394.13000 20190102 32YK1 SPE2DH18P1630 21.000 1356.41000 20180604 74YZ3 SPE2DH18P1184 15.000 1282.50000 20180314 32YK1 SPE2DH17V1630 16.000 1335.91000 20170214 58837 SPE2DH16V2501 17.000 1369.00000 20160601 32YK1 SPE2DH16M0463 13.000 1358.20000 20151125 CONTINUED ON NEXT PAGE
CONTINUATION SHEET REFERENCE NO. OF DOCUMENT BEING CONTINUED: SPE2DH-19-T-6601 PAGE 4 OF 22 PAGES SECTION A Procurement History for NSN/FSC:015536159/6630 CAGE Contract Number Quantity Unit Cost AWD Date 32YK1 S$ DH16M0068 32YK1 SPE2DH14V3122 32YK1 S$ DH14V2252 32YK1 SPE2DH14V0165 58837 SPM2DH13V1222 08576 SPM2DH13M0509 58837 SPM2DH12V0342 08576 SPM2DH12M0490 08576 SPM2DH11V1261 3BSP4 SPM2DSO8MA800 3BSP4 SPM2DS08M6542 3BSP4 SPM2DS08M5128 3BSP4 SPM2DS08M5127 3BSP4 SPM2DS08M5125 18.000 1462.05000 20151005 12.000 1246.39000 20140918 9.000 1246.39000 20140711 10.000 1246.39000 20131223 12.000 1258.00000 20130724 15.000 1100.09000 20121205 27.000 1200.00000 20111223 34.000 1057.77000 20111202 3.000 1057.77000 20110727 2.000 947.16000 20080721 100.000 947.16000 20080323 2.000 947.16000 20080227 2.000 947.16000 20080227 2.000 947.16000 20080225 CONTINUED ON NEXT PAGE
CONTINUATION SHEET REFERENCE NO. OF DOCUMENT BEING CONTINUED: SPE2DH-19-T-6601 PAGE 5 OF 22 PAGES SECTION B

所以我使用了这个代码

for x in fitlerWords:
    try:
        filteredHistory = history.replace(x,"")
    except Exception as e:
        print(e, x)

    print(filteredHistory)

当我打印时,我得到了段落。否已被删除。我做错了什么?如果存在,我如何过滤段落中的所有这些单词?

【问题讨论】:

    标签: python


    【解决方案1】:

    re.sub 与包含所有关键字的替代一起使用:

    fitlerWords = ['Cage','Contract','Number','Quantity','Unit','Cost','AWD','Date','CONTINUED', 'SECTION', 'Procurement','history','For','on','Next','Page','Continuation','Sheet','Reference','of','Document','Being','CONTINUED','pages','SECTION']
    regex = r'\b(?:' + '|'.join(filterWords) + r')\b'
    filteredHistory = re.sub(regex, '', history, flags=re.IGNORECASE)
    print(filteredHistory)
    

    注意:根据您对替换的历史文本的审美,您可能还希望在每个关键字的一侧(例如右侧)删除周围的空格。在这种情况下,我们可以尝试:

    regex = r'\b(?:' + '|'.join(filterWords) + r')\s*\b'
    filteredHistory = re.sub(regex, '', history, flags=re.IGNORECASE)
    

    这里的正则表达式逻辑构建了一个看起来像这样的模式:

    \b(?:Cage|Contract|Number|Quantity)\b
    

    它当然会有更多的关键字,但这是一般模式。我们在这个模式上使用re.sub进行匹配,然后用空字符串替换,有效去除所有匹配的关键字。无论关键字的大小写如何,re.IGNORECASE 标志都会进行此正则表达式替换。

    【讨论】:

    • 能否请您解释一下代码,以便我了解发生了什么
    【解决方案2】:

    修正你的方法:

    filteredHistory = history
    for filterWord in fitlerWords:
        filteredHistory = filteredHistory.replace(filterWord, "")
    print(filteredHistory)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-29
      • 1970-01-01
      • 1970-01-01
      • 2018-09-28
      • 2011-03-31
      • 1970-01-01
      • 2011-02-02
      • 1970-01-01
      相关资源
      最近更新 更多