Я пытаюсь отфильтровать пустой массив по регулярному выражению в Python, однако я сталкиваюсь с ошибкой, когда не все ожидаемые значения совпадают.
Данные, с которыми я работаю, представляют собой большой массив строк различной длины. Предвосхищая фильтр регулярных выражений, я создал индекс всех строк определенной длины, и в конечном итоге я хотел бы установить этот индекс на подстановку с помощью фильтра регулярных выражений.
Я создал следующую функцию, предназначенную для фильтрации этого индекса:
# Remove all indices corresponding to peptides contaning Cs.
def remove_cs(peptide_arr, indices_arr):
indices_peptide_arr = peptide_arr[indices_arr]
r = re.compile(b'C')
v_search = np.vectorize(lambda x: not bool(r.search(x, re.IGNORECASE)))
indices_filter = v_search(indices_peptide_arr)
filtered_indices_arr = indices_arr[indices_filter]
return filtered_indices_arr
Цель вышеупомянутой функции состоит в том, чтобы поднастроить массив индексов, заданный в качестве входных данных, чтобы он содержал только те индексы, соответствующие значения которых не содержат никаких C. В качестве входных данных приведены полная нефильтрованная пептидная матрица и матрица индекса отбора. Похоже, это работает для фильтрации большинства желаемых индексов, однако, при проверке фильтра, некоторые из них оказываются несоответствующими. Например, индекс, соответствующий b'ACAAAAAA'
, все еще возвращается. Более того, похоже, что во всех случаях, когда регулярное выражение отсутствует, соответствующий пептид содержит C в качестве одного из первых двух символов, что, я считаю, имеет значение для этой ошибки.
Следующий небольшой пример сценария иллюстрирует проблему. Хотя ожидается, что будет возвращено только 2 (индекс, соответствующий «AAAA»), также возвращается 6 (индекс, соответствующий «ACAA»).
peptide_list = ['AA', 'AAA', 'AAAA', 'AAAC', 'AACA', 'AACC', 'ACAA', 'ACAC', 'ACCC']
peptide_byte_list = [i.encode() for i in peptide_list]
peptide_arr = np.array(peptide_byte_list)
indices_arr = np.array([2, 3, 4, 5, 6, 7, 8])
print(remove_cs(peptide_arr, indices_arr))
Буду признателен за понимание того, почему в моем текущем регулярном выражении отсутствуют какие-либо совпадения, встречающиеся в первых двух символах строки.