【问题标题】:Finding substring in python [duplicate]在python中查找子字符串[重复]
【发布时间】:2013-09-27 01:39:34
【问题描述】:

我是 python 新手,我正在尝试不同的方法来完成相同的任务,现在我正在尝试弄清楚如何使用 for loopwhile loop 从字符串中获取子字符串.我很快发现使用regex 完成这项任务非常容易。例如,如果我有一个字符串:“ABCDEFGHIJKLMNOP”并且我想查找“CDE”是否存在,然后打印出“CDE”+字符串的其余部分,我将如何使用循环来做到这一点?现在我正在使用:

for i, c in enumerate(myString):

它返回每个索引和字符,我觉得这是一个开始,但我不知道之后该做什么。我也知道有很多内置函数可以通过执行以下操作来查找子字符串: myString.(Function) 但我仍然想知道是否可以使用循环来执行此操作。

【问题讨论】:

    标签: python string loops


    【解决方案1】:

    这里有一个简洁的方法:

    s = "ABCDEFGHIJKLMNOP"
    if "CDE" in s: 
        print s[s.find("CDE")+len("CDE"):]
    else: 
        print s
    

    打印:

    FGHIJKLMNOP
    

    这里的警告当然是,如果没有找到子字符串,就会返回原来的字符串。

    为什么要这样做?这样做可以让您检查是否找到了原始字符串。因此,这可以被概念化为一个简单的函数(警告:为简洁起见,没有强制执行类型检查 - 由读者根据需要实现它们):

    def remainder(string, substring):
        if substring in string:
            return string[string.find(substring)+len(substring):]
        else:
            return string
    

    【讨论】:

      【解决方案2】:

      给定:

      s = 'ABCDEFGHIJKLMNOP'
      targets = 'CDE','XYZ','JKL'
      

      带循环:

      for t in targets:
          for i in range(len(s) - len(t) + 1):
              for j in range(len(t)):
                  if s[i + j] != t[j]:
                      break
              else:
                  print(s[i:])
                  break
          else:
              print(t,'does not exist')
      

      Python 方式:

      for t in targets:
          i = s.find(t)
          if i != -1:
              print(s[i:])
          else:
              print(t,'does not exist')
      

      输出(在这两种情况下):

      CDEFGHIJKLMNOP
      XYZ does not exist
      JKLMNOP
      

      【讨论】:

        【解决方案3】:

        使用 for 循环获取字符串的其余部分:

        n = len(substr)
        rest = next((s[i+n:] for i in range(len(s) - n + 1) if s[i:i+n] == substr),
                    None) # return None if substr not in s
        

        相当于:

        _, sep, rest = s.partition(substr)
        if substr and not sep: # substr not in s
           rest = None
        

        【讨论】:

          猜你喜欢
          • 2014-02-27
          • 2017-04-25
          • 2014-05-09
          • 2018-02-13
          • 2020-02-24
          • 2015-06-26
          • 2012-11-26
          • 2018-08-27
          • 1970-01-01
          相关资源
          最近更新 更多