私は2つの特定の文字列間の文字列を探すのに役立つコードをPythonで記述しようとしています。単一の文字列でコードを実装すると、目的の出力が得られます。しかし、配列の配列にパターンをマッチさせる必要があります。それは私にエラーを投げつけ続けます。私は単一の文字列をしようとすると、 Pythonの2つの文字列間の特定のパターンを探しています - fastqファイル - シーケンシングの読み込み
import re
def find_between(prefix, suffix, text):
pattern = r"{}\s*(.*)\s*{}".format(re.escape(prefix), re.escape(suffix))
result = re.search(pattern, text, re.DOTALL)
if result:
return result.group(1)
else:
return None
、それは動作します:
text = "AGGTCCTGTAAACCT"
prefix = "TCCT"
suffix = "ACCT"
find_between(prefix, suffix, text)
出力:2人のユーザー指定された配列との間のパターンを探すために、関数を定義する
'GTAA'
しかし、私はfastqファイルを読み込んで検索を実装しようとすると、それはしません:
seqs = readFastq('FN1.fastq')
text = seqs
prefix = "TCCT"
suffix = "ACCT"
find_between(prefix, suffix, text)
それは私がこの一見単純なケースでのマッチングのための正規表現を使用していないだろう
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-26-9c35672e7561> in <module>()
2 prefix = "TCCT"
3 suffix = "ACCT"
----> 4 find_between(prefix, suffix, text)
<ipython-input-19-5f42599c717f> in find_between(prefix, suffix, text)
3 def find_between(prefix, suffix, text):
4 pattern = r"{}\s*(.*)\s*{}".format(re.escape(prefix), re.escape(suffix))
----> 5 result = re.search(pattern, text, re.DOTALL)
6 if result:
7 return result.group(1)
/Users/shravantikrishna/anaconda/lib/python3.6/re.py in search(pattern, string, flags)
180 """Scan through string looking for a match to the pattern, returning
181 a match object, or None if no match was found."""
--> 182 return _compile(pattern, flags).search(string)
183
184 def sub(pattern, repl, string, count=0, flags=0):
TypeError: expected string or bytes-like object
です。タイプ(テキスト)を印刷するとどうなりますか? find_betweenを呼び出す前に 'text'を実際の文字列またはバイトオブジェクトに変換することができます... –
それでも動作しません。また、どのように接頭辞と接尾辞に2文字までの不一致を許すことができるか知っていますか?実際の場合、接尾辞と接頭辞は同じ文字列になります。 – user8033590