1

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

次のことを試しましたが、機能しません。

[ORIGIN(GCATgcat)////]

サンプルデータ:

ORIGIN      
  1 acagatgaag acagatgaag acagatgaag acagatgaag
  2 acagatgaag acagatgaag acagatgaag acagatgaag
//
4

2 に答える 2

1

\\b([GCATgcat]+)\\b単語の境界で囲まれたGCAT文字シーケンス(大文字または小文字)に一致するこのパターン ""を試してください(したがって、単語 "catalog"などの他の文字列に埋め込まれている文字とは一致しません)。サンプルファイルでこの正規表現を繰り返しスキャンすると、各シーケンスが抽出されます。

サンプルファイルの実際の例を次に示します。

// 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"]
于 2011-12-07T15:19:08.430 に答える
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());
      }
   }
}
于 2011-12-07T16:29:41.947 に答える