在字符串中查找并使用多个字符串的重复出现。

2024-10-03 19:21:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我最近开始使用Python并编写了一些简单的脚本 现在我有一个问题:

我有这个字符串:

mystring = 'AAAABBAAABBAAAACCAAAACCAAAA'

我有以下字符串:

String_A = BB
String_B = CC

我想得到所有可能的字符串组合,以字符串\u A开始,以字符串\u B结束(有点模糊,所以下面是所需的输出)

output: 
BBAAABBAAAACCAAACC
BBAAABBAAAACC
BBAAACCAAAACC
BBAAACC

我可以使用

mystring.count()

我可以通过执行以下操作打印出一个特定的输出(第一次出现字符串\u A和第一次出现字符串\u B的输出):

if String_A in mystring:
    String_B_End = mystring.index(String_B) + len(String_B)
    output = mystring[mystring.index(String_A); String_B_End]
    print(output)

这很好,但只提供以下输出:

BBAAABBAAAACC

如何从mystring获取所有指定的输出字符串? 提前告诉他!你知道吗


Tags: 字符串脚本outputstringindexcountendcc
2条回答

如果我正确理解您问题的意图,您可以使用以下代码:

>>> import re
>>> mystring = 'AAAABBAAABBAAAACCAAAACCAAAA'
>>> String_A = 'BB'
>>> String_B = 'CC'
>>> def find_occurrences(s, a, b):
        a_is = [m.start() for m in re.finditer(re.escape(a), s)] # All indexes of a in s
        b_is = [m.start() for m in re.finditer(re.escape(b), s)] # All indexes of b in s
        result = [s[i:j+len(b)] for i in a_is for j in b_is if j>i]
        return result
>>> find_occurrences(mystring, String_A, String_B)
['BBAAABBAAAACC', 'BBAAABBAAAACCAAAACC', 'BBAAAACC', 'BBAAAACCAAAACC']

这将使用从this answer查找子字符串代码的所有匹配项

在其当前形式中,代码不适用于重叠的子字符串,如果mystring = 'BBB'并且您查找子字符串'BB',它只返回索引0。如果您想考虑这种重叠的子字符串,请将获取子字符串索引的行更改为a_is = [m.start() for m in re.finditer("(?={})".format(re.escape(a)), s)]

首先你需要得到文本中String_AString_B的索引。看这个:

s = mystring
[i for i in range(len(s)-len(String_A)+1) if s[i:i+len(String_A)]==String_A]

它返回[4, 9],即mystring'BB'的索引。对于答案为[15, 21]的字符串\u B,也可以这样做。你知道吗

然后你可以这样做:

[(i, j) for i in [4, 9] for j in [15, 21] if i < j]

该行将每个起始位置与每个结束位置合并,并确保起始位置出现在结束位置之前。i < j对于这个特定的例子来说并不是必需的,但是一般来说您应该拥有它。结果是[(4, 15), (4, 21), (9, 15), (9, 21)]。你知道吗

然后将开始索引和结束索引转换为子字符串:

[s[a:b+len(String_B)] for a, b in [(4, 15), (4, 21), (9, 15), (9, 21)]]

相关问题 更多 >