2011-12-07 11 views
1

ファイルからDNA情報を抽出しようとしています。 塩基GCATからなるDNAデータの前に、単語ORIGINがあり、その後に//がある。これらのマーカー間にこれらの塩基を得るために正規表現を書くにはどうすればよいですか?正規表現:2つのマーカー間でDNA情報を抽出

私は以下を試しましたが、動作しません。

[ORIGIN(GCATgcat)////] 

サンプルデータ:

ORIGIN  
    1 acagatgaag acagatgaag acagatgaag acagatgaag 
    2 acagatgaag acagatgaag acagatgaag acagatgaag 
// 
+1

入力文字列と期待される出力を提供できますか? – stema

+0

ちょうどそれ:)ファイルのサンプルを – user1044585

+1

で読んで追加しました。私はlifeformsを解析する正規表現を使用しないでください:) –

答えて

1

それが中に埋め込まれたそれらの文字と一致しないように単語の境界(囲ま(大文字または小文字)の任意GCAT文字列にマッチした「\\b([GCATgcat]+)\\b」このパターンを試してみてください「カタログ」という単語のような他の文字列)。サンプルファイルでこの正規表現を繰り返しスキャンすると、各シーケンスが抽出されます。

はここにあなたのサンプルファイルのための作業例です:正規表現の超ウィザードていない人たちのすべてのために

// Locate the substring between "ORIGIN" and "//" in the file. 
String fileContents = getSampleFileContents(); 
int indexOfOrigin = fileContents.indexOf("ORIGIN"); 
String pertinentSection = fileContents.substring(
    indexOfOrigin, fileContents.indexOf("//", indexOfOrigin)); 

// Search for sequences within the pertinent substring. 
Pattern p = Pattern.compile("\\b([GCATgcat]+)\\b"); 
Matcher m = p.matcher(pertinentSection); 
List<String> sequences = new ArrayList<String>(); 
while (m.find()) { 
    sequences.add(m.group(1)); 
} 
sequences.toString(); // => ["acagatgaag", "acagatgaag", ..., "acagatgaag"] 
+0

私はちょうどそれを行いましたが、まだ動作していませんでした。起源とデータとデータの間に新しい行があった場合はどうでしょうか? – user1044585

+0

@ user1044585:はい、空白と改行を含む一致する文字列内のすべての文字が正規表現に影響します。問題の要点であるので、サンプルデータの文字列をそのまま更新してください。 – maerics

+0

ok私はちょうど私の質問 – user1044585

0

、私は2つのステップのアプローチをお勧めしたいです。数字や改行などの明らかな裂け目を取り除き、マッチを行います。例えば

public class Regex { 

    static String NL = "\n"; 
    static String INPUT = "stuff at beginning ORIGIN" + NL + 
    "1 acagatgaag acagatgaag acagatgaag acagatgaag" + NL + NL + 
    "2 acagatgaag acagatgaag acagatgaag acagatgaag" + NL + 
    "// I added stuff here at the end that should be ignored"; 

    public static void main(String[] args) { 
     Pattern removePattern = Pattern.compile("[\\r\\n \\t\\d]+"); 
     Pattern findPattern = Pattern.compile("ORIGIN[GCATgcat]+//"); 

     Matcher removeMatcher = removePattern.matcher(INPUT); 
     String clean = removeMatcher.replaceAll(""); 

     Matcher findMatcher = findPattern.matcher(clean); 
     if (findMatcher.find()) { 
     System.out.println(findMatcher.group()); 
     } 
    } 
} 
+0

p.s. RNAをカバーする可能性のある塩基に「U」と「u」を加えたい場合があります。 – user949300

+0

これはファイルから自分のデータを読み込むのに理想的な解決策ではありません。しかし、ありがとう – user1044585

+0

私はデモコードのどこかからStringを取得する必要があります。明らかに、あなたは実際のコードのファイルからそれを読んでいました。あなたが受け入れたコードは、単に文字列を使用するだけです!このコードはエラーに対してより堅牢です。ファイルに "ORIGIN"が含まれていない場合は、@maericsコードが爆発します。また、マイナーな作業(whileループ)では、私のコードはファイル内で複数のシーケンスを見つけることができました。多くのDNAデータベースファイルには複数の配列が含まれています。 – user949300

関連する問題