【问题标题】:Delete all items in a list that don't contain a regular expression string删除列表中不包含正则表达式字符串的所有项目
【发布时间】:2012-07-07 22:23:57
【问题描述】:

是否可以删除列表中不包含正则表达式字符串的所有项目?

我在考虑可能只返回一个正则表达式字符串,如果没有,则将列表项设为空,然后再次遍历列表以删除所有空条目,但这似乎效率低下。

有什么想法吗?

例如,假设我有:

["cat", "dog", "monkey", "Fred", "sad"]

我写了一个只选择悲伤的正则表达式。我希望(最好)删除所有其他人。

【问题讨论】:

  • 您需要重写您的问题以更清楚地了解您想要什么。您是否正在寻找正则表达式和字符串之间的一对一匹配?或者您是否尝试使用每个正则表达式(笛卡尔积)测试每个字符串?
  • 好的,我有一个单词列表。我想浏览这个列表,并将其与另一个短语列表进行比较,并检查第一个列表中的任何单词何时在第二个列表中,并记录每个单词的出现次数。

标签: python regex list iteration


【解决方案1】:

最简单的方法是使用列表推导构造一个新列表:

regex = re.compile(...)
new_list = [s for s in old_list if regex.match(s)]

或者,使用filter()

new_list = filter(regex.match, old_list)

【讨论】:

  • 这里是代码:wordlist = ['sad', 'mad', 'im', 'cats', 'dogs', 'goats'] new_list = [s for s in tweets if re.match (wordlist)] 打印 new_list
  • 获取“match() 至少需要 2 个参数”
  • 哦,等等,查看 .compile - 但是您无法编译列表。
  • 你应该编译一个正则表达式,而不是一个列表。
  • 用您的正则表达式填写 (...),而不是您的列表。那么当你在编译的正则表达式对象上使用 match 方法时(不是 re 模块中的 match 函数,这是不同的)它应该可以工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-30
  • 2021-10-13
  • 2012-05-11
  • 2011-06-27
  • 2011-07-22
  • 1970-01-01
  • 2011-03-19
相关资源
最近更新 更多