【问题标题】:Python - Finding substrings at different parts of a stringPython - 在字符串的不同部分查找子字符串
【发布时间】:2020-05-22 11:41:36
【问题描述】:

我有一个字符串,我在其中搜索两个子字符串。如果两者都找到,我希望匹配为真,如果两者都没有找到,我希望匹配为假。如果两个字符串都找到但都在相同的索引上找到,我还希望匹配为假。所以我需要在字符串的不同实例上找到两者。

例如,如果我有一个字符串“23121172”并且我正在寻找“2117”和“117”,那么两个子字符串都会找到。但我想测试匹配项是否匹配相同的字符。

SearchList=["2117","117"]

line = "23121172"

if (all (x in line for x in SearchList)):
    print("Found")
else:
    print("Not Found")

所以一行“23121172”应该打印“Not Found”,一行“2117 117”应该打印“Found”

【问题讨论】:

  • @GregglePeggle 你的意思是匹配应该是不重叠的,对吗?
  • "所以一行“23121172”应该打印“Not Found”,一行“2117 117”应该打印“Found””,这是错误的,没有意义。 SearchList 是要搜索的项目列表,但您将它与 line 混淆了。如果将line 设置为其中任何一个值,它仍会打印"Found",因为SearchList 包含两个子字符串。
  • 至于这部分:“如果两个字符串都找到但都在相同的索引上找到,我也希望匹配为假。” - 你在这里要做的是在字符串上使用.find 来获取索引,然后从主字符串中剪切出匹配字符串并继续。

标签: python python-3.x string list


【解决方案1】:

如果我理解正确,那么这段代码可以帮助你:

for substr in sorted(SearchList, reverse=True):
    if substr in line:
        line = line.replace(substr, '')
    else:
        print("Not Found")
        break
else:
    print("Found")

请记住,代码修改了line,所以如果你还需要它,请先创建一个副本

【讨论】:

    【解决方案2】:

    您可以使用 python 中的正则表达式库。

    例如

    import re
    SearchList=["2117","117"]
    
    line = "23121172"
    for pattern in SearchList:
        if re.search(pattern, line):
            print('Found match',pattern)
        else:
            print('no match')
    

    【讨论】:

      猜你喜欢
      • 2011-04-14
      • 1970-01-01
      • 2021-08-13
      • 1970-01-01
      • 2012-10-24
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      相关资源
      最近更新 更多