def delimiter(delim): assert len(delim) == 1, \ "delimiter can only be a single character long, not %s" % repr(delim) assert delim not in "\n\r", "Cannot use %s as a delimiter" % repr(delim) field = Martel.Group("field", Martel.Rep(Martel.AnyBut(delim + "\r\n"))) line = field + Martel.Rep(Martel.Str(delim) + field) + Martel.AnyEol() record = Martel.Group("record", line) format = Martel.ParseRecords("delimited", {}, record, RecordReader.CountLines, (1, )) return format
def test_reader_parser(): record = Martel.Group("start", Martel.Rep(Martel.Str("abc"))) + \ Martel.Group("end", Martel.Rep(Martel.Str("xyz"))) parser = record.make_parser() parser = Parser.Parser(parser.tagtable) parser.setErrorHandler(handler.ErrorHandler()) parser.parseString("abc" * 10 + "xyz") try: parser.parseString("abc" * 10 + "xyzQ") except Parser.ParserPositionException: pass else: raise AssertionError, "didn't get a position exception" try: parser.parseString("abc" * 10 + "x") except Parser.ParserPositionException: pass else: raise AssertionError, "didn't get a position exception"
internal_oligo_seq = Martel.Group("internal_seq", sequence) internal_line = Martel.Group( "internal_line", primer_space + Martel.Str("INTERNAL OLIGO") + any_space + internal_oligo_start + any_space + internal_oligo_length + any_space + internal_oligo_tm + any_space + internal_oligo_gc + any_space + internal_oligo_seq + Martel.AnyEol()) # XXX This record definition is ugly. But it works :-) record = Martel.Group("primer3_record", comments + \ Martel.Alt( # case 1. primer file with nothing Martel.Str("\n" * 3) + Martel.Opt(Martel.Str("\n" * 4)), # case 2. some primers have been picked Martel.Rep( # case 2a. we are designing a primer pair Martel.Alt(blank_line + primer_start_line, # case 2b. we are designing a single primer single_primer_line) + # case 2a. both primer pairs Martel.Alt(forward_line + blank_line + reverse_line + blank_line, # case 2b1. Reverse primer reverse_line + blank_line, # case 2b2, Forward primer forward_line + blank_line, # case 2b3, Internal oligo internal_line + blank_line)) + blank_line + blank_line + Martel.Rep(blank_line)))
Martel.Opt(RT_block) + \ RL_block ) ############ #--- CC CC_begin = Martel.Group("CC", Martel.Re("CC -!- ") + \ Martel.ToEol("comment_text")) CC = Martel.Group("CC", Martel.Re("CC ") + \ Martel.ToEol("comment_text")) single_comment = Martel.Group("comment", CC_begin + Martel.Rep(CC)) CC_copyright_begin = Martel.Group("CC_copyright_begin", Martel.Re("CC -+\R")) CC_copyright = Martel.Group("CC_copyright", Martel.Re("CC (?!-+\R)") + \ Martel.ToEol("copyright")) CC_copyright_end = Martel.Group("CC_copyright_end", Martel.Re("CC -+\R")) # From N33_HUMAN bogus_DR_group = Martel.Group("bogus_DR_block", Martel.Re(r"(?P<DR>DR (?P<database_identifier>MIM); " \ r"(?P<primary_identifier>601385); " \ r"(?P<secondary_identifier>-).\R)") )
# Copyright 2001 by Katharine Lindner. All rights reserved. # This code is part of the Biopython distribution and governed by its # license. Please see the LICENSE file that should have been included # as part of this package. """Martel regular expression for Intelligenetic format (DEPRECATED). This is a huge regular regular expression for the IntelliGenetics/MASE format, built using the 'regular expressions on steroids' capabilities of Martel. """ #http://immuno.bme.nwu.edu/seqhunt.html # Martel import Martel # --- first set up some helper constants and functions comment_line = Martel.Group( "comment_line", \ Martel.Str( ';' ) + Martel.ToEol( "comment" ) ) comment_lines = Martel.Group("comment_lines", Martel.Rep(comment_line)) title_line = Martel.Group( "title_line", \ Martel.Expression.Assert( Martel.Str( ';' ), 1 ) + Martel.ToEol() ) residue_line = Martel.Group( "residue_line", \ Martel.Expression.Assert( Martel.Str( ';' ), 1 ) + Martel.ToEol( "sequence" ) ) residue_lines = Martel.Group("residue_lines", Martel.Rep1(residue_line)) intelligenetics_record = comment_lines + title_line + residue_lines
amplifier = Martel.Group("amplifier", Martel.Re("[\d]+")) amplimer_line = Martel.Str("Amplimer ") + amplifier + Martel.AnyEol() # Sequence: AC074298 AC074298 # Telomere associated sequence for Arabidopsis thaliana TEL1N # CCGGTTTCTCTGGTTGAAAA hits forward strand at 114 with 0 mismatches # TCACATTCCCAAATGTAGATCG hits reverse strand at [114] with 0 mismatches seq_indent = Martel.Str("\t") sequence_id = Martel.Group("sequence_id", Martel.ToEol()) sequence_descr = Martel.Group("sequence_descr", Martel.ToEol()) sequence_info = sequence_id + sequence_descr forward_strand_info = Martel.Group("forward_strand_info", Martel.ToEol()) reverse_strand_info = Martel.Group("reverse_strand_info", Martel.ToEol()) amplifier_sequence = Martel.Group( "amplifier_sequence", sequence_info + forward_strand_info + reverse_strand_info) amplifier_sequence_lines = seq_indent + Martel.Str("Sequence: ") + \ amplifier_sequence amplifier_length = Martel.Group("amplifier_length", Martel.Re("[\d]+")) amplifier_length_line = seq_indent + Martel.Str("Amplimer length: ") + \ amplifier_length + Martel.Str(" bp") + \ Martel.AnyEol() record = Martel.Group( "primersearch_record", Martel.Rep1(blank_line + primer_name_line + Martel.Rep(amplimer_line + amplifier_sequence_lines + amplifier_length_line)))