用于嵌套的Python正则表达式

时间:2018-08-15 15:19:39

标签: python regex python-3.x pattern-matching

我有以下“字符串”:

warning: format specifies type 'int' but the argument has type 'float'

我想“提取”列表中的开始/结束,当然要考虑正则表达式。 现在我知道了:

var svg = d3.select("svg"),
    width = +svg.attr("width"),
    height = +svg.attr("height");

    var fader = function(color) { return d3.interpolateRgb(color, "#fff")(0.2); },
    color = d3.scaleOrdinal(d3.schemeCategory20.map(fader)),
    format = d3.format(",d");

    var treemap = d3.treemap()
    .tile(d3.treemapResquarify)
    .size([width, height])
    .round(true)
    .paddingInner(1);

d3.json("data.json", function(data) {

  var root = d3.hierarchy(data)
      .eachBefore(function(d) { 
        d.data.id = (d.parent ? d.parent.data.id + "." : "") + d.data.name; })
      .sum(sumBySize)
      .sort(function(a, b) { 
        return b.height - a.height || b.value - a.value; });
  treemap(root);

  console.log(d.data.id);

  var cell = svg.selectAll("g")
    .data(root.leaves())
    .enter().append("g")
      .attr("transform", function(d) { return "translate(" + d.x0 + "," + d.y0 + ")"; });

  cell.append("rect")
      .attr("id", function(d) { return d.data.id; })
      .attr("width", function(d) { return d.x1 - d.x0; })
      .attr("height", function(d) { return d.y1 - d.y0; })
      //.attr("fill", function(d) { return color(d.parent.data.id); });

  cell.append("clipPath")
      .attr("id", function(d) { return "clip-" + d.data.id; })
    .append("use")
      .attr("xlink:href", function(d) { return "#" + d.data.id; });

  cell.append("text")
      .attr("clip-path", function(d) { return "url(#clip-" + d.data.id + ")"; })
    .selectAll("tspan")
      .data(function(d) { return d.data.name.split(/(?=[A-Z][^A-Z])/g); })
    .enter().append("tspan")
      .attr("x", 4)
      .attr("y", function(d, i) { return 13 + i * 10; })
      .text(function(d) { return d; });

  cell.append("title")
      .text(function(d) { return d.data.id + "\n" + format(d.value); });

  d3.selectAll("input")
      .data([sumBySize, sumByCount], function(d) { return d ? d.name : this.value; })
      .on("change", changed);

  var timeout = d3.timeout(function() {
    d3.select("input[value=\"sumByCount\"]")
        .property("checked", true)
        .dispatch("change");
  }, 2000);

  function changed(sum) {
    timeout.stop();
    treemap(root.sum(sum));
    cell.transition()
        .duration(750)
        .attr("transform", function(d) { return "translate(" + d.x0 + "," + d.y0 + ")"; })
      .select("rect")
        .attr("width", function(d) { return d.x1 - d.x0; })
        .attr("height", function(d) { return d.y1 - d.y0; });
  }
});

function sumByCount(d) {
  return d.children ? 0 : 1;
}

function sumBySize(d) {
  return d.size;
}

这将导致:

    d3.json("data.json", function(data) {

  var root = d3.hierarchy(data)
      .eachBefore(function(d) { 
        d.data.id = (d.parent ? d.parent.data.id + "." : "") + d.data.name; })

但是,我希望能抓到两场比赛...

{ see 'identifier' }
     Some Text
     { see 'otherid' }
          Another Piece of Text
     { /see }
{ /see }

在单个正则表达式中有可能吗?还是我应该对此有所不同?

如果需要,这是在Py3.4 +中,除了可用的本机模块外,没有其他框架。可以安装Pip,但不是首选。谢谢!

1 个答案:

答案 0 :(得分:0)

好,所以当我们匹配字符串的结尾时,就像这样:

(\{ see([\s\S]+?)\}([\s\S]*?)\{ \/see \}$)

按预期返回第一场比赛,但不返回第二场比赛。

Match 1
1.  { see 'identifier' } Some Text { see 'otherid' } Another Piece of Text { /see } { /see }
2.  'identifier'
3.  Some Text { see 'otherid' } Another Piece of Text { /see }

这仍然不是我想要的,但是会在需要时解决问题。