Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python3中,如何搜索并获取包含两个搜索词的字符串中的第二个词?_Python_Python 3.x - Fatal编程技术网

在Python3中,如何搜索并获取包含两个搜索词的字符串中的第二个词?

在Python3中,如何搜索并获取包含两个搜索词的字符串中的第二个词?,python,python-3.x,Python,Python 3.x,我正在制作一个Python脚本,在列表字符串中查找单词“Hold”,并确认它是否可保持 File = [ "Hold_Small_Far_BG1_123456789.jpg", "Firm_Large_Near_BG1_123456789.jpg", "Move_Large_Far_BG1_123456789.jpg", "Firm_Large_Far_BG1_123456789.jpg&quo

我正在制作一个Python脚本,在列表字符串中查找单词“Hold”,并确认它是否可保持

File = [
    "Hold_Small_Far_BG1_123456789.jpg",
    "Firm_Large_Near_BG1_123456789.jpg",
    "Move_Large_Far_BG1_123456789.jpg",
    "Firm_Large_Far_BG1_123456789.jpg",
    "Hold_Small_Hold_BG1_123456789.jpg",
    "Hold_Small_Near_BG1_123456789.jpg",
    "Small_Small_Far_BG1_123456789.jpg",
]

for item in File:
    if "Hold" in item: return print('Yes, object is holdable.')
    else: return print('No, object is not holdable.')
上面的代码看到第一个“Hold”字并返回true。可保持对象是将“保持”作为第三个单词的对象

问题是代码看到第一个“Hold”字并返回true。我希望代码检查文件名中是否有一个单词“Hold”,同时忽略第一个单词“Hold”

请注意,我无法使用“\u1”拆分字符串,因为它是由人生成的。所以,有时它可以是逗号、点,甚至是空格

这个有表达方式吗?对不起,英语不好

谢谢。:)

i=0
而(i1:
打印('是,对象可保持')
其他:
打印('否,对象不可保存')
i+=1

已编辑,现在仅当“Hold”出现多次时才起作用。

您可以使用正则表达式模式:

import re
holdables = ['yes' if re.findall(r'\w.*(Hold)', x) else 'no' for x in File]

for x in holdables:
    print(x)

这里的正则表达式只假设“Hold”不是字符串中的第一个单词,但在其他地方确实存在,因为您说您不能确定是否会出现下划线或其他分隔符。如果您需要更严格的正则表达式模式条件,您可以随时更新它。

如果我正确理解了这个问题,我们希望查找文件名是否包含“Hold”,忽略第一次出现的内容。但是,如果没有明确的分隔符,这是很困难的。以下是我认为可行的两种方法:

  • 使用类regex:
  • 重新导入
    对于文件中的fname:
    如果重新匹配((^.+Hold.*$)”,fname):
    #如果找到保持,则编码
    
    假设:此答案依赖于假设,如果发生这种情况,则只能在第三个位置和第一个位置发生保持。在这种情况下,我们忽略第一个,搜索第三个“保持”

    重新匹配((^.+Hold.*$),“Hold_Small_Hold_BG1_123456789.jpg”) >>>关于匹配((^.+Hold.*$),“Hold_Small_Far_BG1_123456789.jpg”) >>>
  • 使用
    split()
  • 我们可以用“Hold”来拆分字符串。当“Hold”出现在第三个位置时,我们得到一个包含2或3个元素的列表

    文件中fname的
    代码:
    如果len(fname.split(“Hold”)=3:
    #如果找到保持,则编码
    
    同样的,假设是只有在第三个位置和第一个位置(如果发生)才能保持

    >>“持有小型持有BG1.jpg”。拆分(“持有”)
    ['''.'u Small'.'.'u BG1.'u 123456789.jpg'.]包含3个元素的列表
    >>>“Hold_Small_Far_BG1_123456789.jpg”。拆分(“Hold”)
    [”,“,”小\u Far\u BG1\u 123456789.jpg'].\
    
    这里没有足够的信息;“holdable”对象的文件名中到底有什么内容?是不是“Hold”这个词一直是第三个词?这是最后三个字吗?无论采用哪种方式,您都需要使用regex
    import re
    可保持对象图像始终将“保持”或“可保持”作为第三个单词。此外,如果第三个单词是“Hold”,那么该单词的第一个单词也将始终是“Hold”。这就是为什么我不知道如何定位第三个单词,如果它是'Hold'还是'not'。你能展示一些以单词Hold开头的不可保持对象的例子吗?最好列出几个例子,这样模式就清楚了。一旦你知道了这一点,你就可以设计一个正则表达式(regex)来针对你感兴趣的字符串的特定部分。如果需要任何信息,请告诉我。字符串的“第三个单词”是什么?告诉您字符串的“单词”是什么的规则是什么?为了解决这个问题,也许你应该从实现这个逻辑开始。这并不能解决“Hold”不能作为第一个单词的事实,所以在这些情况下,这个方法仍然失败。我一直在寻找这个。我将学习更多关于正则表达式的知识。非常感谢。
    import re
    holdables = ['yes' if re.findall(r'\w.*(Hold)', x) else 'no' for x in File]
    
    for x in holdables:
        print(x)