0

我正在为所有.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>

我想对此进行扩展,以便根据我可以定义的方案对每一列进行不同的格式化。即坐标是一种颜色,名称是另一种颜色,分数是另一种颜色。问题是坐标和分数等都是数字字符串。

我能看到的“最简单”的解决方案是一个可以选择列的正则表达式,如果选择更大,则列数不返回任何内容(不环绕行)。

反向搜索似乎不起作用(因为正则表达式中的“>”字符。我尝试过但表现不佳的一些正则表达式是:

  1. 建立迭代匹配并以不同方式格式化是行不通的。多次选择相同的字符串会导致所有语法高亮失败。

    ^.+?\t
    ^.+?\t.+?\t
    ^.+?\t.+?\t.+?\t ...
    
  2. 选择“数字字符串”

    Single numeric string
    (?<=^\w\t)[0-9]+(?=\t)
    
    Numeric string doublets
    (?<=\t)[0-9]+\t[0-9]+(?=\t){1}
    

我将继续破解一个丑陋的解决方案,但我想知道是否有一些我没有想到的优雅的东西。

4

0 回答 0