【问题标题】:Python string search: how to find exact matches, and not match with strings that contain searched string in themPython字符串搜索:如何找到完全匹配,而不是与其中包含搜索字符串的字符串匹配
【发布时间】:2020-06-23 16:25:55
【问题描述】:

我需要我的脚本来显示不同单词的定义。

我正在使用循环来查找字符串 (X) 和数组中的项目之间的匹配项。

if any(i in X for i in ('coconut, Coconut')):
    print("found coconut")

if any(i in X for i in ('nut', 'Nut')):
    print("found nut")

问题是,当数组 X 中的项目是一个包含另一个单词的单词(例如椰子和坚果)时,两个打印都被执行。

我如何确保当数组 X 中有一个名为椰子的项目时,我只得到椰子的打印,而不是坚果的打印?

我将永远感激任何帮助。

【问题讨论】:

  • 测试是否相等,i == X?
  • 显示X的示例。
  • 请清楚X 是什么——你指的是一个字符串和一个数组。从你的代码执行来看,它必须是一个字符串,但你的问题措辞含糊。

标签: python loops search match


【解决方案1】:

这应该有效 - i in X 测试是否在字符串 X 中找到子字符串 i,而这测试它们是否等价。

if any(i == X for i in ('nut', 'Nut'):
    print('found nut')

【讨论】:

  • X 是一个列表,而不是一个字符串。
  • @dspencer X 是一个字符串,正如 OP 所说的 a string (X)
  • “我如何确保当数组 X 中有一个名为椰子的项目时”来自问题,这是非常模棱两可的,因为他们也将其称为字符串,是的。
  • 好吧,他的问题的第一部分呢?
  • @dspencer 他的问题只有在字符串中才有意义,不在列表中,您可以检查
【解决方案2】:

您可以测试单个字符串的相等性,而不是 X 数组中是否存在单词(在 python 中通常称为 list,除非您使用的是 numpy):

if any(i == x for i in ('coconut', 'Coconut') for x in X):
    print("found coconut")

if any(i == x for i in ('nut', 'Nut') for x in X):
    print("found nut")

或者更好的是,您可以先将测试字符串转换为小写,这样每个单词只需要一个 for 循环:

if any(x.lower() == "coconut" for x in X):
    print("Found coconut")

除非您想区分专有名词,例如为 Jersey 和 jersey 提出不同的定义,否则此方法有效。

如果X 是一个字符串,一个简单的相等性检查将适用于此:

if X.lower() == "coconut":
    print("Found coconut")

【讨论】:

    【解决方案3】:

    你可以将你的字符串 X 转换成一个集合:

    sx = set(X.split()) # to get the words you may use a regex, depending of how X looks
    if sx & {'coconut, Coconut'}:
        print("found coconut")
    

    【讨论】:

    • 根据问题,X 是一个“数组”,我认为它是一个列表,而不是一个字符串。
    • 似乎问题在 X 是什么方面是模棱两可的:“我如何确保当数组 X 中有一个名为椰子的项目时”。从他们代码的行为来看,它一定是一个字符串,但歧义是一个糟糕的短语问题的标志。
    • @dspencer 是的,你是对的,这个问题是模棱两可的,但是如果 X 是一个列表,那么 OP 问题就没有意义
    • 同意。虽然,基于in 测试,我想知道 OP 是否将X 视为一个列表 - 如果X 是一个字符串,这样的测试将是一个不合逻辑的字典查找。
    【解决方案4】:

    谢谢大家,我已经弄明白了。

    在这种情况下,只需在较短的关键字前添加一个空格即可。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-11
      • 1970-01-01
      相关资源
      最近更新 更多