我有以下文字:
TRANSCRIPT WS000006.1 (802 nt)
PARENT_CONTIG WS000006
FEATURES Location/Qualifiers
source 1..802
/organism="Winter skate"
CDS complement(3..443)
/protein_id="WS000006.1_orf1"
/orf_type="5prime_partial"
/blastp_hit_swissprot="MALD2_HUMAN"
/blastp_hit_uniprot="Q8N4S9"
/blastp_hit_name="MARVEL domain-containing protein 2"
/blastp_hit_identity="61.29%"
/blastp_hit_evalue="5e-47"
/pfam_hit_accession="PF07303.8"
/pfam_hit_id="Occludin_ELL"
/pfam_hit_name="Occludin homology domain"
/pfam_hit_evalue="7.3e-28"
/translation="AKSFPSRCNGAGTLNKSIPAGFIPKPLIVPDYVTKYPKIETAEE
RERYKGVFNDQYAEYRELHTEIYVANRKFGELKTLIERLPHYVETSEEHR
RIMKILEDYKEKKNDPTFVEKKQRCTYLKNKLSYIKLRIQEYDLDCDSSS
SY*"
/go_cellular_component="plasma membrane|0005886"
/go_cellular_component="tight junction|0005923"
/go_biological_process="cell-cell junction organization|0045216"
/go_biological_process="sensory perception of sound|0007605"
ORIGIN
1 CTGCCAAGAG CTTCCCGTCG CGGTGCAACG GTGCGGGCAC GCTCAACAAG TCCATTCCCG
61 CAGGATTCAT CCCGAAGCCT CTCATCGTTC CCGATTACGT CACAAAGTAC CCGAAGATTG
121 AGACTGCAGA GGAGAGAGAA CGGTACAAGG GTGTGTTCAA TGACCAGTAC GCGGAATATC
181 GGGAGCTACA CACTGAGATC TATGTGGCCA ACAGGAAGTT TGGGGAACTG AAGACTCTGA
241 TCGAGAGACT GCCCCACTAC GTCGAGACAT CAGAGGAGCA CAGACGTATA ATGAAGATCC
301 TCGAAGATTA CAAGGAGAAA AAGAATGACC CAACATTTGT GGAGAAGAAG CAACGATGCA
361 CTTACCTGAA GAACAAACTC TCGTACATCA AGCTGCGAAT CCAGGAGTAT GATCTAGACT
421 GTGACTCCTC CAGCAGTTAC TGAACAAAAT CTCACATCAT TCATCATTAA TATTTTCATT
481 ATTTTTCTTC TAGTGCAGAT AGGATTCATT TGGGCCGTGG AGTGTGTATG TATGTGTGTG
541 TGTGTATGTA TGTGTGCGTG TGTACGTATA TGTGTGTGTG TACACCGTGT TGTGTGTACC
601 TGTGTGTACG TGTATGTATG TGTGTGTACG TGTGTGTGTG CGCATGATTA TATGTGTGTG
661 TGAATATGAG TGCGGGTGTG TGCATATGTG TGTGTGTGAA ATAATATAGT ATTTCGTAGT
721 TCAGAGCTTA TTTGTTAAGT TTAATAGCGT GATGGCTGTC AGGAAGAAGC TGTTCCTCAA
781 TGTAGATGTT ACAGTTTTCA GT
//
我想得到以/ go _
开头的行所以我构建了以下正则表达式:\/go_.+?=".+?"
在我看来应该得到/ go_位,然后是=字符之前的其余部分,然后是=字符之后的最后部分,它在引号内。
然而,在在线正则表达式测试器(https://regex101.com/)上,我只是将第一个/ go_行作为匹配。我怎样才能匹配所有的线?
感谢。
答案 0 :(得分:1)
模式可能是:
\s*\/go_.*
但是,您需要将g
(全局)传递给flag以捕获所有匹配项:
https://regex101.com/r/lW7mQ5/1。根据您的编程语言和上下文,您可能还需要传递m
(多行)选项并将模式更改为^\s*\/go_
(请注意^
当m
被传递时行的开头)
顺便说一下。请注意如何在SO上提问。你应该a)创建尽可能短的例子,而不是仅仅粘贴大量文本,b)解释你正在做什么,用哪种编程语言和你到目前为止所尝试的内容(!)。
答案 1 :(得分:0)
在该特定的正则表达式引擎中,在第二个文本输入框中使用g参数(在/之后)将使其查找所有出现的内容。这是因为该引擎不是逐行搜索您的字符串,而是作为要搜索的单个单一blob文本。因此,它找到第一个匹配并退出。 g开关告诉它找到所有匹配。
这样做的结果是,您需要了解如何使用您正在使用的目标语言扫描多行字符串以查找所有匹配项。这里有一些Ruby可以完成这项任务:
s=<input string above>
s.scan(/\/go_.+?=".+?"/).each do |match|
puts match
end
输出是:
/go_cellular_component="plasma membrane|0005886"
/go_cellular_component="tight junction|0005923"
/go_biological_process="cell-cell junction organization|0045216"
/go_biological_process="sensory perception of sound|0007605"