Разве вы не можете просто передать URL в функцию fetch
в качестве параметра? Таким образом, подпись для fetch
становится такой:
Future fetch(String url) {
// do stuff
}
Если вы хотите передать значение по умолчанию, синтаксис немного отличается:
Future fetch({String url = "http://default"}) {
// do stuff
}
И тогда вызывающая сторона может выбрать: передать URL или нет.
Помните, что Flutter написан на Dart, так что в конечном итоге вы просто пишете код для дротиков. Для вопросов, связанных с языком (например, как передать параметры в функции), языковой тур является отличным ресурсом.
Попробуйте это:
re.compile(r"^(.+)\n((?:\n.+)+)", re.MULTILINE)
я думаю, что Ваша самая большая проблема состоит в том, что Вы ожидаете ^
и $
привязки соответствовать переводам строки, но они не делают. В многострочном режиме, ^
соответствия положение сразу после новая строка и $
соответствия положение сразу предшествование новая строка.
знать также, что новая строка может состоять из перевода строки (\n), возврат каретки (\r), или carriage-return+linefeed (\r\n). Если Вы не уверены, что Ваш целевой текст использует только переводы строки, необходимо использовать эту более содержащую версию regex:
re.compile(r"^(.+)(?:\n|\r\n?)((?:(?:\n|\r\n?).+)+)", re.MULTILINE)
BTW, Вы не хотите использовать модификатор DOTALL здесь; Вы полагаетесь на то, что точка соответствует всему кроме новые строки.
Это будет работать:
>>> import re
>>> rx_sequence=re.compile(r"^(.+?)\n\n((?:[A-Z]+\n)+)",re.MULTILINE)
>>> rx_blanks=re.compile(r"\W+") # to remove blanks and newlines
>>> text="""Some varying text1
...
... AAABBBBBBCCCCCCDDDDDDD
... EEEEEEEFFFFFFFFGGGGGGG
... HHHHHHIIIIIJJJJJJJKKKK
...
... Some varying text 2
...
... LLLLLMMMMMMNNNNNNNOOOO
... PPPPPPPQQQQQQRRRRRRSSS
... TTTTTUUUUUVVVVVVWWWWWW
... """
>>> for match in rx_sequence.finditer(text):
... title, sequence = match.groups()
... title = title.strip()
... sequence = rx_blanks.sub("",sequence)
... print "Title:",title
... print "Sequence:",sequence
... print
...
Title: Some varying text1
Sequence: AAABBBBBBCCCCCCDDDDDDDEEEEEEEFFFFFFFFGGGGGGGHHHHHHIIIIIJJJJJJJKKKK
Title: Some varying text 2
Sequence: LLLLLMMMMMMNNNNNNNOOOOPPPPPPPQQQQQQRRRRRRSSSTTTTTUUUUUVVVVVVWWWWWW
<час> Некоторое объяснение об этом регулярном выражении могло бы быть полезным: ^(.+?)\n\n((?:[A-Z]+\n)+)
^
) означает "запускаться в начале строки". Знайте, что это не соответствует самой новой строке (то же за $: это означает "незадолго до новой строки", но это не соответствует самой новой строке). (.+?)\n\n
означает "соответствие как можно меньше символов (все символы позволяются), пока Вы не достигаете двух новых строк". Результат (без новых строк) помещается в первую группу. [A-Z]+\n
означает "соответствие как можно больше прописных букв, пока Вы не достигаете новой строки. Это определяет то, что я назову textline. ((?:
средства textline)+)
соответствуют одному или нескольким textlines, но не помещают каждую строку в группу. Вместо этого поместите весь textlines в одной группе. \n
в регулярном выражении, если Вы хотите осуществить двойную новую строку в конце. \n
или \r
или \r\n
) тогда просто, фиксируют регулярное выражение путем замены каждого возникновения [1 111] [1 112]. Если бы каждый файл только имеет одну последовательность аминокислот, я не использовал бы регулярные выражения вообще. Просто что-то вроде этого:
def read_amino_acid_sequence(path):
with open(path) as sequence_file:
title = sequence_file.readline() # read 1st line
aminoacid_sequence = sequence_file.read() # read the rest
# some cleanup, if necessary
title = title.strip() # remove trailing white spaces and newline
aminoacid_sequence = aminoacid_sequence.replace(" ","").replace("\n","")
return title, aminoacid_sequence
найдите:
^>([^\n\r]+)[\n\r]([A-Z\n\r]+)
\1 = some_varying_text
\2 = строки всех заглавных букв
Редактирование (доказательство, что это работает):
text = """> some_Varying_TEXT
DSJFKDAFJKDAFJDSAKFJADSFLKDLAFKDSAF
GATACAACATAGGATACA
GGGGGAAAAAAAATTTTTTTTT
CCCCAAAA
> some_Varying_TEXT2
DJASDFHKJFHKSDHF
HHASGDFTERYTERE
GAGAGAGAGAG
PPPPPAAAAAAAAAAAAAAAP
"""
import re
regex = re.compile(r'^>([^\n\r]+)[\n\r]([A-Z\n\r]+)', re.MULTILINE)
matches = [m.groups() for m in regex.finditer(text)]
for m in matches:
print 'Name: %s\nSequence:%s' % (m[0], m[1])
Мое предпочтение.
lineIter= iter(aFile)
for line in lineIter:
if line.startswith( ">" ):
someVaryingText= line
break
assert len( lineIter.next().strip() ) == 0
acids= []
for line in lineIter:
if len(line.strip()) == 0:
break
acids.append( line )
В этой точке у Вас есть someVaryingText как строка и кислоты как список строк. Можно сделать "".join( acids )
для создания единственной строки.
я нахожу это менее печальным (и более гибкий), чем мультилиния regexes.