在字符串及其切片中查找子字符串?

时间:2011-04-28 03:25:36

标签: python string indexing substring

我一直在努力帮助我的朋友完成他的任务,我甚至无法弄清楚从哪里开始。我可以让它来识别字符串里面的子字符串但是给它开始的地方让我感到不安。我已经好几个小时了。欢迎任何帮助。以下是我在下面的任务中所做的一切。

PS。他的全班都不知道怎么做。老师给了他们一些关于他们和我的联盟的方法。

编写一个程序,要求用户输入两个字符串stringA和stringB。

  1. 程序必须首先找到stringA中出现stringB的所有起始位置。

    例如,如果stringA是“the car is in that carport”和stringB 是“car”,程序应该报告stringB出现在stringA中,从第4和第19位开始 (记住那个字符串 从位置0开始。

  2. 接下来程序必须找到stringA中的所有起始位置 stringB几乎出现了。

    • '几乎'意味着stringB的其中一个字母没有 匹配。
    • 例如 如果stringA与上面的相同,并且stringB是“the”,则该程序 应该报告 stringB几乎从第14位开始,这是第14位的开始 字符串“tha”。
    • 通知 它没有报告它几乎出现在0号位置, 从那里出现 零不匹配。
  3. 最后,程序必须找到stringA中的所有起始位置 反向的 stringB出现。

    • 例如,如果stringA与上面相同,并且 stringB是“rop”,然后 程序应该报告stringB的反向出现在 stringA从第22位开始。
  4. 程序equalsubstrings.py有助于理解如何操作 写这个程序。

3 个答案:

答案 0 :(得分:1)

stringA = "the car is in that carport"
stringB = "the"

exact = []
reverse = []
almost = []

lenA = len(stringA)
lenB = len(stringB)
limit = lenA - lenB
reversedB = stringB[::-1]

pos = stringA.find(stringB)
while pos >= 0:
    exact.append(pos)
    pos = stringA.find(stringB, pos + 1)

pos = stringA.find(reversedB)
while pos >= 0:
    exact.append(pos)
    pos = stringA.find(reversedB, pos + 1)

for i in range(limit):
    substrA = stringA[i:i+lenB]
    misses = 0
    for j in range(lenB):
        if substrA[j] != stringB[j]:
            misses += 1
    if misses == 1:
        almost.append(i)

print exact, almost, reverse

答案 1 :(得分:0)

我会给你两条线索:

为了检查字符串是否是另一个字符串的子字符串,您可以执行以下操作:

  1. 使用find
  2.   
        
          

    a =“这是一个测试”

                 

    B = “测试”

                 

    a.find(B,0,14)

        
      

    10

    1. 使用运算符in,如以下示例所示:
    2.   
          
            

      a =“这是一个测试”       B = “测试”       c =“不相关的文字”       b       真正       b在c       假

          
        

      要反转字符串,请执行以下操作:

      >>> a="this is a test"
      >>> a[::-1]
      'tset a si siht'
      

      祝你的作业好运

答案 2 :(得分:0)

我使用re模块。

  • re.finditer允许您浏览字符串中子字符串的所有匹配项。
  • 每场比赛都会为您提供“匹配对象”。
  • 在任何匹配对象上使用mo.start(),以便在字符串中找到匹配的索引。
  • 对于“几乎”匹配,请通过stringB char-by-char,用[^<current_character>]替换当前字符,并为每个生成的正则表达式重复匹配过程,记录所有匹配项。
  • 最后,使用stringB的反向进行简单搜索(参见其他地方)。

这种方法的好处:你可以很好地掌握re :-)。

BTW:什么是神秘的equalsubstrings.py程序? ; - 。)