Python: как найти строку в другой строке и выполнить преобразование регистра в искомой строке? - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть строка как,

subject_codes = "PTAQIFAIIAMRDGRVYLHPSNTPSTOPGCCRCRVFTLLRLPSGTFDESTTGWEKTSSLYHPGGNHTSTVSWWTILRKAAMGTGRLLLDEKEETPSTOPSCTHEVLGPTARCCSTOPYPIDEVNSTOPAFSTNRGCHQCCRRQFGVLGPHYVPSRREGKCKHLSTOPGLSPKDVLCWYFQSRPSGGSTOPLEELLPISVSPICSTOPNGGHRWEAYYQSTOPDQHLQETPWSLYLQEPGLIFQIIPDSWPPTLNTSISLYGEAMSTOPGEISSTOPEVSTOPGSCDFPSRSEGVTSQSTOPDGRGRLLHRSTOPKVPPLSCPTSTOPCRTFFHSTOPSTOPFGRLSTOPVLHLRRRECLRRSNINDSTOPGTREEVRYHGGDDPLGVYPTQYRPRNLEISLQGYPHSRRFLPSTOPTSYFRFSSTOPGTTWSHEGPSTOPRSHRSPTHVCCLEEKCPSTYGTLSTOPHSGSTOPNGQSTOPSPYRHCGSSMAADPAGTFGAHFKTHDVESPICVLQFSSAGSSLDGGHNDLQVQVVELRRSSILRFEGRDECSRYHLDSSPRETIPKGLWSTTKSLRSTOPLRNRSYWTSTOPRDRPPDGTTYSLAQRYHDGGTHGEAMSHSLEPLCGVLRVAQIQSSTOPVSTOPPGEPPSEALPYWGRSTOPSLSGRSPALSSTOPLYDKVPSSIWVPDRGWSTWYFPYSGTLRGESTVHREFLEEETPSTOPSQELSRIDDCGDHKGQNSSTOPTRISTSYYQRSTOPSTOPECCHRQVLDDISLFEVDAKTPTVARMAQTDDKRPIRVTNGGMATESPETSEVFQSTOPHHASQILRGLWLSHVRPRGIYGLYKSLPTIAVDYRRSLSTOPRPSTMEGRDQRTFPVKPEPLEERRHSTOPVSKVRTRHHSTOPTTHDGLESTOPSSELEATRREVSISSWSTRDSSRGPTGGLHVHKTICRSTOPGDTRCHFPKLSFGASSTOPDLQFQHSALSTOPKNYGDCVGKTGGPWHSTOPSTOPMLANLRFRRVSINEGSTOPSKRRFLLSTOPHPRDYLCRYRVLGPGSTOPSGDSTOPDLGVHSTOPCSTOPFSTOPETIHHESSNSQNSRSTOPIPLPFEESTOPRAILWGVQRTGHGSYGTGDIMSSTOPSPPVTTWLDYLFGFCRRRVPKEFHRQHHASEPTAQI"

и список подстрок как

category_codes = ["MRDGRVYLHPSNTPSTOP","MGTGRLLLDEKEETPSTOP","MSTOP","MAADPAGTFGAHFKTHDVESPICVLQFSSAGSSLDGGHNDLQVQVVELRRSSILRFEGRDECSRYHLDSSPRETIPKGLWSTTKSLRSTOP","MSHSLEPLCGVLRVAQIQSSTOP","MATESPETSEVFQSTOP","MAQTDDKRPIRVTNGGMATESPETSEVFQSTOP","MEGRDQRTFPVKPEPLEERRHSTOP","MLANLRFRRVSINEGSTOP","MSSTOP"]

Я хочу найти подстроки из списка в большую строку и измените соответствующие регистры на строчные в самой большой строке. Я знаю, как искать строку в другом, используя метод find(), но я не могу придумать, как лучше заменить соответствующие подстроки в большей строке. Я ищу более чистый и эффективный в вычислительном отношении способ сделать это.

Желаемая строка вывода должна быть такой,

output = "PTAQIFAIIAmrdgrvylhpsntppstopGCCRCRVFTLLRLPSGTFDESTTGWEKTSSLYHPGGNHTSTVSWWTILRKAAMGTGRLL...."

Ответы [ 3 ]

2 голосов
/ 22 апреля 2020

Вы можете использовать регулярные выражения, создав альтернативную группу из второго списка

s = '|'.join(category_codes)
res = re.sub(s, lambda x: x.group(0).lower(), subject_codes)
1 голос
/ 22 апреля 2020

Я думаю, вы можете использовать метод split ():

for category in category_codes:
    tmp_list = subject_codes.split(category, -1)
    category.lower().join(tmp_list)
0 голосов
/ 22 апреля 2020

Простой, но не очень производительный и вычислительно неэффективный:

for cc in category_codes:
    subject_codes = subject_codes.replace(cc, cc.lower())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...