Regulärer Ausdruck: Erkennen von '>'

  • Hallo,

    ich hoffe ihr könnt mich aufklären.
    Auf der Suche nach Zeilen mit dem Zeichen '>' finde ich mit AutoIt nichts:

    AutoIt
    $fnames = StringRegExp($string, "\s*>(.*)", $STR_REGEXPARRAYGLOBALMATCH)


    Wenn ich den Regex bei Rubular teste erhalte ich genau die Teile, die mich interessieren. Ich habe auch schon das '>' per '\' escaped, finden tut er es trotzdem nicht. Bei der gezielten Suche nach diesem Zeichen ist ebenfalls weder mit noch ohne escapen ein Treffer da:

    AutoIt
    MsgBox(0, "", StringRegExp($string, "\>", 0)) ;$STR_REGEXPMATCH

    Wer kann mir erklären woran das liegt?

    Mein Teststring:

    Spoiler anzeigen


    >Smp_175550 Gene Sequence
    ATGGCGTCCG AATTAGAAGC ATATGTTGGC CGTATCCTTT TTCTTGTTGG TTAAAAATTT
    GGTGTTTGTT AGTTCGAAAT CAACCATAGT AGTTGTAGGA GGATGTAGTG ATAGTGGTTC
    CTTCTTACAC CATTTAGATA TACATTTTCA TATTTAAAAA AACCATATTA TTTTATTCTT
    CTCCTCCATT TGATCTTATT CGCTTTCTCT TTGCAAATAT AATTTCATTA TATTTATATG
    AAATAATATG CGTATATTAT ATAAGTAAAA TTCTATGTCA ATTTGTGTAC GTTGTTTTTT
    CCCAACTATC TGATAACTTC AAATCAATTA GCTTTTCGCT TAAATAAATG AAAAAAAAAA
    TGCAACTGTG ACTTAGTAAC AGTTCATAAT GTTATTGACT GTTCGACTGA AGCGTGTAGG
    TGTGTGTTTA TAGGCTAACT GGTTGTGCTC CGCGTGATTA TCGCATGCAA TTTAATATAA
    AGAAGTAGTT TGTGATCCTA TGGTACAAAT ATACAAGATA ATCGACTGAG TGAGTAGTCC
    AGCTGAGCAT ACCAGGAAAA GATACTAAAT AATTGGACTA ATATACTAGC TCACAGCTGA
    AAACGAATGT AAGGCCAATA AAAGTTACCT TCTATTCACT AAATCTCGTT GTTTACGCAT
    ATCAGTCTTT TCTTTCATTC AAGCTATTTC TTTTTTATTT CGCTTATTTT CGTTACAATA
    ACTTTGAATG TATTCATCAA ATATTTCATG TATAGTCTAT GCTCGTAGGA TGTACACGCA
    ATCAATTTCA GTGGATCAGT AAACAGAATA TCAATATTGC ATATCTATCA TCTAGGGAAT
    TCTACTTTCT TTAACCATTT TCTTTATATA TACCAGGAAT GGTAAATGTT ATAACATCAG
    ATGGAAGAAC TATTGTCGTA AGTGAAGTTT TTTTTGAATT ATATGTATTT ATATACTCAA
    TTTAGTTTAG TCAAGTTAAA AGAAGTGCTA ATTCCCAAAC AAACAAAAAT TTATCAGTAA
    GGAGTAACAT AAATTCATTC AGTATTGTTT GTTTGAATCT TCTCATCGAT GTGTTAGGAC
    TGCACAGTAT GCACATATAC CAATTAGAGA CTGACCAGTT GCAGTCCTAA CACATCGATG
    GAAAGATTCA AACAAACAAT ACTAAATGAA CTTAAACTTC ACCCCATCGC ACAAGCAAGT
    GGCTATCAGG ACTCAGTGGC CGAGTGGATA ACGCGATGGC GTTTGAAGCG AAGGTTACTG
    GGTTCGAGTG CCAGAGTGAA CATCAACTGT GAGATGCAGG TACACCCAGC TGACGAGTCC
    CAAATAGTAC GAAACGCGCG TCCTGAATTT CACTGCTAGT CACTATCCAT CTTTGCATAC
    CAAGAAGTAA CATATTTATA CCGAGCTAGA ATACCAATAA TTAATAGAAA CAATTTAAAT
    TGTTCACACA CACAAGAGAA AATGTACGAT CAAAAGCAAA GCGGCGATAG ATGAGGAAAA
    AAATATTTTG ACAGGTAGAA TCATCAAAAT TTGATTATGA GTGAATGGAA TAATTCATTA
    CGATAGGAAA GACAACACGC TGCAGCATAC GTGTCAATTA ATTATCAGAA GAGGGTTTTT
    GTGGAGATTT AGTATTTTCA TAGTTGAAAT CACGACCTCG ACTCGTGGAT GCGCACTGCT
    GAGGAGTCCC ACAATGGGGC GAAACGGCCT TCCAGTACTC TCAGGTTTTC CATGGTGGTC
    GAGCTTCGAT TGACTCACGC TTTCAACTAT TTAAATAATT ACAAAAGCAA TTCCAACTAT
    TGAGAATTTG TTAGATTTAC AAAGATAATG TAACCGATGT TGTATAAATT GAAAGACTGT
    CACAGCTTCT CAGAATATTT ATACAGAAAT ATATTTATAG AATACTGAAT GGTTCCACAA
    CACATCCAGC TCAACAACAA CAGTCAATTC GTAGCTGAAA CAAGCACAAA ATCCTATCTT
    ATATGCCAGG ATAGATTGAG TATGAATCAA TAAACCAGAG AACAGTTGAT TTACTAATAT
    TTATTTTTAT CAATGAAATA CAAGGAACGG AAAAATTCTA GTCACTCATA TATATATCAT
    ATTTATAATG TGCGAGCTTC ATACTCTCTA CTCCGGATTT AGAGTTAATT TCATTTTCCC
    TTTATTTTGC GTTGATAACA ACTGCCCAAA TCTTCTGTAA TACTTAGTTG TCAGATTTAC
    CCCTTTTATA TCAACTGATT CGTCTCTTCT CAGTATCAGT AAATTGCTCG GCAAGAGTAC
    ACTTTCTTCA CCAAAATCTT CCATCAGTCT TACTAACGGC TTGTTTTTCA AATCCTTTCT
    GCCTTCACTA GTGTTGTCTG AAGTACAATA TCAGTAATCG GCTATTGATC TAAAACAAAT
    ACTACTATCC TTTCACATCG TTTTGATAAA CCTCCCTATA ATCCTATGTA GTAGGCTTTC
    GGAAGATTAC CTTGAATATT AATTTAACAT AAACTAGTTA TTTTTTTGTG GTACTATCTA
    GTATTTATAT ATATTCCGAC AAGCTATCTT CTCGTTTACA TGACCTCGTC TACATTTTCC
    TGGTGAATAT AATAAAGCTT TTTATTAATC ATTAACAAAA TACAGATCAT AACATTATTT
    ATTTATTTAA ACATAGATAT TGATACAAAA AGCACCAGAT ACACATGCGC CGCACAAATC
    TCATTCGATT TGTGAGGGCT GTGATACTGC CCAGGTGCCC AAACTGAAGC GGGTGGTTTT
    CTTAGGGGGT CACACCCGGA GCCTTTGACC TAAAATTCTA ATCCACAAGG CAGTGGAGCA
    TCGTAAGAAG ATGCAGTCCC ACGGTAGCCG GTGACCAACG ATTGATTCGT ACGCCATTTG
    TTCCCTCAGG ATACTGGAGC ACCACTGGTT TTGAATCAGG GTTTTCTAAC TCCCCTAGAT
    GGATTTTCCG TGTACACCAA CCCGGTTGAA GCGTCGGACA TTCGCTTTTC GTCCTCTCAA
    TTTCGTAAAC GACACCCTCT TTACGGGAAG GCAGTGAGTA GGACTTCCGT GACAGAGGCT
    ATATACGCGT GGCCATGTGA GAGCATTTGG AGAGGGAGAG TGGGCTCTCC CCACTCTCGG
    CCGTACCAAG GCATTTGGGG GCAAAAGCCG TGCGCCGGCC GTGAATTTTC ATTCCATTTT
    GAATTTCTAT ATGAATGATG ATAAAATTAT TTTGTTTACC ATCCTTGTCA TCCTAGCTAA
    TCTTAATAAA ATTACTCACT TTACTAGGGT ACATTAAAAG GATTTGATAA TGTTGTCAAT
    CTTGTTATCA AAGATAGCCA TGAACGAGTT TTCAGTCCAA CTGAAGGTGT TGAACAAGTT
    CCATTGGGTT TATTTATTAT TCGAGGACAG AATGTGTAAG TTGTGTTGAT ATAAAGCTGT
    AGTTAGTTGC AAAATTACTA GTTCTGAGGT TGAAACTTTA AATGATGCAA TATTTATTTG
    TACTATGCTA TTTTTTCCAG GGCTGTAGTC GGAGAACTTG ATGAAGATCT AGATAGGCGA
    ATTGATTTTT CACAACTTCG TGCTGAACCT CTTAATCCTG TTGTACATTA A
    >Full transcript CDS
    ATGGCGTCCG AATTAGAAGC ATATGTTGGC CGAATGGTAA ATGTTATAAC ATCAGATGGA
    AGAACTATTG TCGGTACATT AAAAGGATTT GATAATGTTG TCAATCTTGT TATCAAAGAT
    AGCCATGAAC GAGTTTTCAG TCCAACTGAA GGTGTTGAAC AAGTTCCATT GGGTTTATTT
    ATTATTCGAG GACAGAATGT GGCTGTAGTC GGAGAACTTG ATGAAGATCT AGATAGGCGA
    ATTGATTTTT CACAACTTCG TGCTGAACCT CTTAATCCTG TTGTACATTA A

    Vielen Dank,
    Aquaplant

  • Ich benutze momentan den Text aus dem Spoiler als $string

    Keine Ahnung wieso, es klappt jetzt, dafür geht jetzt der andere Regex nicht mehr (bei Rubular funktionieren beide Versionen)

    AutoIt
    $fasta = StringRegExp($string, "(^[ATGC]+[ATGC\s]*)", $STR_REGEXPARRAYGLOBALMATCH)
        ;bzw
        $fasta = StringRegExp($string, "^([ATGC]+[ATGC\s]*)", $STR_REGEXPARRAYGLOBALMATCH)


    Mal eine ganz blöde Frage: Brauche ich einen Puffer um Dateien zu lesen nachdem ich sie geöffnet habe?

  • Ja, du musst den Dateiinhalt schon in dem RAM schieben.
    Sag bitte was du mit dem Regex anstellen willst. Nur "funktioniert nicht" hilft nicht.

  • 1. Regex:
    Alle Zeilen die (mit beliebig vielen whitespaces starten und dann) mit '>' beginnen -> komplette Zeile in ein Array ($fnames)

    2. Regex:
    Alle Zeilen die A, T, G oder C mindestens einmal enthalten was am Zeilenanfang steht und dann aber dazwischen beliebig viele whitespaces haben dürfen -> alle Zeilen in einen Arrayslot ($fasta)

    Oder Kurz gesagt (siehe Spoiler):
    Alle Zeilen mit dem > in ein Array
    Alles was dazwischen steht jeweils in ein anderes Array

    Oder siehe hier:
    http://rubular.com/r/n5InG4dAMh
    http://rubular.com/r/e7jk0YIoXN


    Vielen Dank schon mal

  • AutoIt
    StringRegExp($string, ">(.*[ATGC\s]+)", 3)

    Damit holst du dir alle Zeichen nach ">", danach iterierst du durch die Ergebnisse und extrahierst deine Zeilen.

  • Dankesehr, das klappt :)
    Mich würde trotzdem interessieren warum der andere Regex nicht so funktioniert wie er sollte. Nehme ich das '^' weg funktioniert er, nur holt er sich dann eben auch noch alle a, t, g und c's aus den restlichen Wörtern...

    • Offizieller Beitrag

    "(^[ATGC]+[ATGC\s]*)"
    "^([ATGC]+[ATGC\s]*)"

    Nehme ich das '^' weg funktioniert er, nur holt er sich dann eben auch noch alle a, t, g und c's aus den restlichen Wörtern...

    Beide Pattern sind nicht für Multiline-Suche. Somit ist das ^ nur ein Marker für den Stringanfang, also nicht auch für 'nach Zeilenumbruch'.
    Wenn du (?m) vor dein Pattern stellst (bedeutet: Match the remainder of the regex with the options: ^ and $ match at line breaks (m) ), arbeitet es so, wie erwartet.
    Und wenn du die Pattern verknüpfst, bekommst du mit einem Aufruf alle Ergebnisse in ein Array:
    Item-0: Name1
    Item-1: Sequenzen1
    Item-2: Name2
    Item-3: Sequenzen2
    etc.
    Immer im Wechsel Name und zugehörige Sequenzen.

    EDIT: Sinnvoll ist noch, die Zeilenumbrüche aus den Sequenzen zu entfernen. Habe das mal am Ende angefügt.