2017-06-06 10 views
0

縮退または非常にわずかな「ファジー」文字列に正確なパターンマッチを検索しようとしています。縮退した文字列をPythonで検索する

pattern = 'VGSGSGSGSAS' can be 10-50 characters long 
string = "VGSGSGGSGSGSGSGSERGSAS" or "VGSGSGSGSGSGAGERSAS" #it's actually 400 character long string 
string[11] = S|A 
re.search(pattern, string) #does not work 

ので、文字列[11]このサンプルではSまたはAのいずれかであるので、私は、私は2つの別々の文字列を作成する必要はありません、2定義された文字列内のパターンを探し、しかしです実際には、400文字の文字列の中にそれぞれ異なる3つのオプションを持つ複数の(少なくとも4つの)位置。だから私は24の異なる文字列を作って検索することに目を向けるだろう。それはただ一つのシーケンスのためです。私のシーケンスのいくつかは64の異なる文字列になります。検索の結果を見つけたら、開始点と終了点、実際に一致する文字列[11](SまたはA)を特定したいと考えています。どのように私はこのパターンマッチングを行うことができる任意のアイデア?ありがとうございました!あなたはそのための正規表現を必要としない

+0

ですから、センタリングしたいですターゲット文字列の位置11にNまたはKがあるパターン?私。パターンがKVTMQNLの場合 – sln

+0

'string [11]はどこにNかKか? 'とはどういう意味ですか? – sln

+0

私は文字列がVGSE'KVTMQ [N | K] L'NDRLASによって違うと理解していますが、一致する_pattern_は 'KVTMQ [N | K] L'です。したがって、_pattern_は固定ではなく、変数です。本当に奇妙な部分は、_Target_文字列の_11th_の位置に意味があるかのように投げ込み続けることです。私は、ターゲット文字列の11番目の位置で、この可変パターン 'KVTMQ [N | K] L'の終わりを示していることがわかります。それがここの唯一の関係だ。あなたがそれらを理解すれば、正規表現は非常に強力です。何も知らなくても、あなたがしようとしていることを説明するのがなぜ難しいのか分かります。 – sln

答えて

0

、シンプルstr.find()はそれを見つけるために十分である:

pattern = "KVTMQNL" # substring to find 
your_strings = ["VGSEKVTMQNLNDRLAS", "VGSEKVTMQKLNDRLAS"] # just a list of strings 
for source in your_strings: # go through each string in our list 
    print("String: {}\nEleventh character: {}".format(source, source[11])) 
    if source[11] in ("N", "K"): # check if it has `N` or `K` on its 11th position 
     index = source.find(pattern) # search for the pattern 
     if index > -1: # if the pattern is found anywhere in the string... 
      print("Pattern start: {}\nPattern end: {}".format(index, index + len(pattern))) 
     else: 
      print("No match!") 
    print("---") 

どのプリントアウトします:それはあなたが探しているまさにだ

String: VGSEKVTMQNLNDRLAS 
Eleventh character: N 
Pattern start: 4 
Pattern end: 11 
--- 
String: VGSEKVTMQKLNDRLAS 
Eleventh character: N 
No match! 
--- 

わからない場合あなたの質問はちょっと混乱しています。

+0

@ user2789176 - 上記のリストは、あなたの質問が示唆しているものとは異なる文字列を示すことです。どのようなものが1つに属し、別の文字列に属しているかを他にどのように知っていますか? – zwer

0

私はあなたの質問から理解することは正しいかどうか、実際に、あなたはこの例のように文字列のリストでre.search()を使用することができます。

import re 

strings = ["VGSEKVTMQNLNDRLAS", "GSEKVTMQNLNDRLAS", "DRLASKVTMQKL", "GSEKVKVTMQPLDRLAS"] 
pattern = r'KVTMQ[N|K]L' 

for k in strings: 
    s = re.search(pattern, k) 
    print("Search in: {} ".format(k), end = ' ') 
    if s: 
     print("Found: {} in position: {}".format(s.group(), s.span())) 
    else: 
     print("Not found") 

出力:

Search in: VGSEKVTMQNLNDRLAS Found: KVTMQNL in position: (4, 11) 
Search in: GSEKVTMQNLNDRLAS Found: KVTMQNL in position: (3, 10) 
Search in: DRLASKVTMQKL Found: KVTMQKL in position: (5, 12) 
Search in: GSEKVKVTMQPLDRLAS Not found 
関連する問題