regex 如何用正则表达式解决任务

uyto3xhc  于 2023-04-22  发布在  其他
关注(0)|答案(1)|浏览(119)

任务:输入是由字符A、B、C组成的字符串。
找出连续的“AA”或“CC”子串的最大数量。
其中 * 号代表任何可能的字符。
考虑重叠。
输入:https://kompege.ru/files/sJDwcyfWx.txt
输出:21
语言:Python
不含RegEX的溶液(正确):

with open("./data/24_4546.txt") as f:
    s = f.readline().replace('\n', '')

c = m = 0
for j in range(3):
    for i in range(j, len(s) - 2, 3):
        if s[i] + s[i + 2] == "AA" or s[i] + s[i + 2] == "CC":
            c += 1
        else:
            m = max(m, c)
            c = 0

m = max(m, c)
print(m)

我尝试使用regex(不工作):

import re
with open("./data/24_4546.txt") as f:
    s = f.readline().replace('\n', '')

print(len(max(re.sub(r"[^*]", " ", re.sub(r"(?=A[A-C]A)|(?=C[A-C]C)", "*", s)).split(), key=len)))
gr8qqesn

gr8qqesn1#

  • 技巧 * 是在lookaheadAssert(?=...)中使用捕获组:
import re

with open("./data/24_4546.txt") as f:
    s = f.read().strip()

out = max(len(m) // 3  for m, *_ in re.findall(r'(?=((?:([AC]).\2)+))[AC]', s))
print(out)

图纸:

21

相关问题