【问题标题】:compare string with list and print only matched keywords in python将字符串与列表进行比较并在python中仅打印匹配的关键字
【发布时间】:2018-07-24 19:25:23
【问题描述】:
frontvar="risk management system application tracking system digital signature computer systems "

listvar = ['c','computer system','tracking','management',etc]

matchedkeys =[i for i in listvar if i in frontvar]

output :['c',
 'ca',
 'com',
 'computer systems',
 'eme',
 'git',
 'io',
 'man',
 'management',
 'nat',
 'om',
 'ppl',
 'r',
 're',
 'tal',
 'track',
 'tracking']

列表(listvar)很大

我想打印完全匹配的单词,例如计算机、计算机系统、风险管理系统等。它不应该打印像 ('nat', “嗯”, 'pp', 'r', '回覆', “塔尔”, '跟踪')

【问题讨论】:

    标签: python regex string list


    【解决方案1】:

    您正在检查子字符串匹配,而不是单词匹配。

    只是改变:

    matchedkeys = [i for i in listvar if i in frontvar]
    

    收件人:

    matchedkeys = [i for i in listvar if i in frontvar.split()]
    

    frontvar 字符串拆分为列表将匹配frontvar 中的单词而不是字符串中的字符。

    【讨论】:

    • 如果我们拆分只显示 1 个词,但我想要两个词三个词等...
    • 然后手动构造一个元组...('risk management', 'computer systems', ...etc...)
    • 对于元组也得到相同的结果
    【解决方案2】:

    要匹配frontvar 中的一个单词,只需更改

    matchedkeys = [i for i in listvar if i in frontvar]

    matchedkeys = [i for i in listvar if i in frontvar.split()] 正如@mVChr 建议的那样。

    要匹配多个单词,我建议使用 mVChr 建议的元组(不确定为什么这对您不起作用,您必须发布更新),或者执行以下操作:

    matchedkeys = [i for i in listvar if all([j in frontvar.split() for j in i.split()])]

    如果listvar 中的每个单词也是frontvar 中的一个单词,这将得到listvar 中的任何内容。 (我这里用“word”来描述用空格分隔的子串。)

    我不确定这是否真的是你想要的,你的问题对我来说有点不清楚,我没有足够的声誉来发表评论。如果您正在做一些更复杂的事情,那么正则表达式也可能是合适的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多