在最后一个" _"之前和之后获得两个子串/组。

时间:2016-08-08 15:15:15

标签: regex r

让我们看一个例子:

abc_def_ghi_jkl

如果我选择n = 1,我希望输出为:

group1 = abc_def_ghi
group2 = jkl

如果我选择n = 2,我希望输出为:

group1 = abc_def
group2 = ghi_jkl

注意:删除了将这两个组分开的_

目前我只想出了如何选择最后一组,但它也选择了_

(?:.(?!(?=\_)))+$

注2:我目前专注于正则表达式部分,但如果它有助于获得解决方案,则它是在R中使用的代码。

1 个答案:

答案 0 :(得分:1)

可以从字符串末尾分割第n次出现的var width = 420, barheight = 30; var svg = d3.select('#bar-chart') .append('svg') .attr('width', width + 50) .attr('height', 1000); var scale = d3.scaleLinear() .range([0, width]); function createBar(data) { scale.domain([0, d3.max(data)]); var barGroups = svg.selectAll('g') .data(data, function(d){return d;}); barGroups.exit().remove(); var enterGroup = barGroups.enter() //ENTER .append('g') .merge(barGroups) //UPDATE .attr("transform", function(d, i){ return "translate(0, " + barheight * i + ")"; }); var bars = barGroups.selectAll('rect'); enterGroup.append('rect') //ENTER .attr('class', 'bar') .attr('height', barheight - 1) .merge(bars) //UPDATE .attr('width', function(d){ return scale(d); }) .attr('fill', 'steelblue'); var texts = barGroups.selectAll('text'); enterGroup.append("text") //ENTER .attr('class', 'text') .attr("y", barheight / 2) .attr("dy", ".35em") .merge(texts) //UPDATE .attr("x", function(d) { return scale(d) + 10; }) .text(function(d) { return d;}); }

_

strsplit("abc_def_ghi_jkl", "_(?=([^_]*_){0}[^_]*$)", perl = T) # ^ # you can modify the quantifier here #[[1]] #[1] "abc_def_ghi" "jkl" # split on the 1st strsplit("abc_def_ghi_jkl", "_(?=([^_]*_){1}[^_]*$)", perl = T) #[[1]] #[1] "abc_def" "ghi_jkl" # split on the 2nd strsplit("abc_def_ghi_jkl", "_(?=([^_]*_){2}[^_]*$)", perl = T) #[[1]] #[1] "abc" "def_ghi_jkl" # split on the 3rd 在模式_(?=([^_]*_){2}[^_]*$)之前通过_预览语法查找([^_]*_){2}[^_]*$,模式从字符串?=的末尾开始并跳过任何非$模式_并匹配[^_]*一定数量的事件以及指定([^_]*_)上的分割后。{/ p> 来自_包的<{1}}

更新

str_match