У меня есть следующий код
def append_letter():
string = 'ACAABAACAAABACDBADDDFSDDDFFSSSASDAFAAACBAAAFASD'
result = []
# compete the pattern below
pattern = r'(?<=AAA)\w+'
for item in re.finditer(pattern, string):
# identify the group number below.
result.append(item.group(1))
return result
из приведенного выше сценария я хочу добавить в список любую букву, за которой следует тройная A, включая A.
Как этого добиться, изменив только эту строку кода:
pattern = r'(?<=AAA)\w+'
Вы можете использовать re.findall
с позитивным прогнозом.
>>> import re
>>> str = 'ACAABAACAAABACDBADDDFSDDDFFSSSASDAFAAACBAAAFASD'
>>> re.findall(r'.(?=AAA)', str)
['C', 'F', 'B']
Или, если вам необходимо использовать re.finditer
:
>>> [match[0] for match in re.finditer(r'.(?=AAA)', str)]
['C', 'F', 'B']
Я не считаю безумием предпочитать прямоту первого.
В любом случае правильный шаблон для соответствия любому символу, за которым следует AAA
:
r'.(?=AAA)'
попробуй это:
import re
def append_letter():
string = 'ACAABAACAAABACDBADDDFSDDDFFSSSASDAFAAACBAAAFASD'
result = []
# Complete the pattern below
pattern = r'(?<=AAA)\w'
for item in re.finditer(pattern, string):
result.append(item.group())
return result
# Call the function and store the result
letters_following_AAA = append_letter()
# Print the result
print(letters_following_AAA)
вывод кода ["B", "C", "F"]
Я не понимаю, вы имеете в виду, что хотите, чтобы код был короче?
Как я уже упоминал, я хочу изменить только строку шаблона, просто измените здесь r'(?<=AAA)\w', чтобы добавить результат в виде списка, который у нас есть, C,B,D,...
если я правильно понимаю, попробуйте следующее: r'(?<=AAA)[^A]\w+'
Мы не хотим добавлять больше скриптов из исходного кода.