让我们看一个例子:
abc_def_ghi_jkl
如果我选择n = 1
,我希望输出为:
group1 = abc_def_ghi
group2 = jkl
如果我选择n = 2
,我希望输出为:
group1 = abc_def
group2 = ghi_jkl
注意:删除了将这两个组分开的_
。
目前我只想出了如何选择最后一组,但它也选择了_
:
(?:.(?!(?=\_)))+$
注2:我目前专注于正则表达式部分,但如果它有助于获得解决方案,则它是在R中使用的代码。
答案 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