4

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

for i, c in enumerate(myString):

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

4

3 回答 3

6

鉴于:

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')

Pythonic方式:

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
于 2013-09-21T21:19:58.673 回答
3

这是一个简洁的方法:

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
于 2013-09-21T21:06:09.820 回答
0

使用 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
于 2013-09-21T21:38:47.567 回答