我正在为所有.bed文件编写语法高亮文件。每列的确切内容可能会有所不同,通常如下所示
chr1 11873 14409 uc001aaa.3 0 + 11873 11873 0 3 354,109,1189, 0,739,1347,
chr21 1000000 1230000 peakValue 200 -
chrX 11873 14409 selection
....
<string> <numeric> <numeric> <string> <numeric 1-1000> <+ or - or .> <numeric> <numeric> <numeric> <numeric> <comma separated list> <comma separated list>
到目前为止,我有第一列选择和链工作:
床.lang
<?xml version="1.0" encoding="UTF-8"?>
<language id="bed" _name="Bed" version="2.0" _section="Scientific">
<metadata>
<property name="mimetypes">text/bed</property>
<property name="globs">*.bed</property>
</metadata>
<styles>
<style id="chrom" _name="Chrom" map-to="bed:chr" />
<style id="strand" _name="Coords" map-to="bed:strand" />
</styles>
<definitions>
<context id="bed">
<include>
<context id="1_chr" style-ref="chrom">
<match extended="true">
^\w+
</match>
</context>
<context id="6_strand" style-ref="strand">
<match extended="true">
\t[+\-\.]\t
</match>
</context>
</include>
</context>
</definitions>
</language>
我想对此进行扩展,以便根据我可以定义的方案对每一列进行不同的格式化。即坐标是一种颜色,名称是另一种颜色,分数是另一种颜色。问题是坐标和分数等都是数字字符串。
我能看到的“最简单”的解决方案是一个可以选择列的正则表达式,如果选择更大,则列数不返回任何内容(不环绕行)。
反向搜索似乎不起作用(因为正则表达式中的“>”字符。我尝试过但表现不佳的一些正则表达式是:
建立迭代匹配并以不同方式格式化是行不通的。多次选择相同的字符串会导致所有语法高亮失败。
^.+?\t ^.+?\t.+?\t ^.+?\t.+?\t.+?\t ...
选择“数字字符串”
Single numeric string (?<=^\w\t)[0-9]+(?=\t) Numeric string doublets (?<=\t)[0-9]+\t[0-9]+(?=\t){1}
我将继续破解一个丑陋的解决方案,但我想知道是否有一些我没有想到的优雅的东西。