как сопоставить шаблон и добавить к нему символ - PullRequest
0 голосов
/ 10 января 2019

У меня есть что-то вроде:

GCF_002904975:2.6672e-05):2.6672e-05.
и я хотел бы добавить слово «_S» сразу после любой записи GCF (любое число) перед следующим двоеточием.

Другими словами, я хотел бы, чтобы мой текст стал таким:

GCF_002904975_S:2.6672e-05):2.6672e-05.
Я повторил шаблон так по всему тексту.

Ответы [ 3 ]

0 голосов
/ 10 января 2019

Вы можете использовать регулярные выражения с подстановкой функций. Приведенное ниже решение зависит от того, что номера всегда состоят из 9 цифр, но их можно изменить для работы с другими случаями.

test_str = '(((GCF_001297375:2.6671e-05,GCF_002904975:2.6672e-05)0.924:0.060046136,GCF_000144955:0.036474926,((GCF_001681075:0.017937143,...'
new_str = re.sub(r"GCF_\d{9}", lambda x: x.group(0) + "_S", test_str)

print(new_str)
#(((GCF_001297375_S:2.6671e-05,GCF_002904975_S:2.6672e-05)0.924:0.060046136,GCF_000144955_S:0.036474926,((GCF_001681075_S:0.017937143,...
0 голосов
/ 10 января 2019

Это легко сделать с помощью функции re.sub. Рабочий пример будет выглядеть так:

import re

inp_string='(((GCF_001297375:2.6671e-05,GCF_002904975:2.6672e-05)0.924:0.060046136,(GCF_000144955:0.036474926,((GCF_001681075:0.017937143,...'

if __name__ == "__main__":
    outp_string = re.sub(r'GCF_(?P<gfc_number>\d+)\:', r'GCF_\g<gfc_number>_S:', inp_string)
    print(outp_string)

Этот код дает следующий результат, который, мы надеемся, вам нужен:

(((GCF_001297375_S:2.6671e-05,GCF_002904975_S:2.6672e-05)0.924:0.060046136,(GCF_000144955_S:0.036474926,((GCF_001681075_S:0.017937143,...

Для получения дополнительной информации взгляните на документы: https://docs.python.org/3/library/re.html

0 голосов
/ 10 января 2019

Почему бы просто не заменить? Сократите пример строки, чтобы ее было легче читать:

"(((GCF_001297375:2.6671e-05,GCF_002904975:2.6672e-05)...".replace(":","_S:")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...