假设我有以下字符串dog.puppy/cat.kitten/bear.cub
。我只想获取bear
。我可以通过执行以下操作来做到这一点:
$str = "dog.puppy/cat.kitten/bear.cub"
$str = $str.split('/')[2]
$str = $str.split('.')[0]
我可以使用管道使用一行获得bear
吗?这不起作用,但是会是这样的:
$str = "dog.puppy/cat.kitten/bear.cub"
$str = $str.split('/')[2] | $_.split('.')[0]
答案 0 :(得分:4)
我可以用一条管道使用管道 来获得“轴承”吗?
字符串已经存储在内存中,没有没有理由使用管道 -这样只会减慢速度。
>相反,使用PowerShell的运算符 ,该运算符比使用管道更快,并且通常比更灵活类似命名为 .NET [string]
类型的方法 ,因为它们可对 regexes (正则表达式)进行操作,并且也可以在整个数组上操作:
PS> ('dog.puppy/cat.kitten/bear.cub' -split '[/.]')[-2]
bear
也就是说,用文字/
或文字.
(使用字符集[...]
)分割输入字符串,并返回倒数第二个(倒数第二个)({{ 1}})令牌。
例如,请参见this answer,以了解为什么您通常更喜欢-split
operator而不是String.Split()
方法。
类似地,类似的情况是更喜欢-replace
operator而不是String.Replace()
方法。
链接这些运算符很容易:
[-2]
也就是说,返回倒数第二个令牌并区分大小写- (使用PS> ('dog.puppy/cat.kitten/bearOneTwoThree.cub' -split '[/.]')[-2] -csplit '(?=\p{Lu})'
bear
One
Two
Three
运算符的-csplit
变体),只要大写字母({{1} })使用positive look-ahead assertion,-split
)开始。
答案 1 :(得分:3)
您可以这样做:
using CR_Vector_t = std::vector<uint16_t, CR_Vector_Allocator>;
CR_Vector_t Generate_CR_Vector(){
/* total_parameters is a member of the same class
as this member function and is defined elsewhere */
CR_Vector_t cr_vec (total_parameters);
std::uniform_int_distribution<uint16_t> dist_;
/* urng_ is a member variable of type std::mt19937_64 in the class */
std::generate(cr_vec.begin(), cr_vec.end(), [this, &dist_](){
return dist_(this->urng_);});
return cr_vec;
}
void Prepare_Next_Generation(...){
/*
...
*/
using hpx::parallel::execution::par_unseq;
hpx::parallel::for_loop_n(par_unseq, 0l, pop_size, [this](int64_t idx){
auto crossovers = Generate_CR_Vector();
auto new_parameters = Generate_New_Parameters(/* ... */, std::move(crossovers));
}
}
不需要管道。
答案 2 :(得分:1)
有一个更简单的解决方案,
.split()
方法使用每个字符进行拆分,
使用负索引从背面开始计数,因此
> "dog.puppy/cat.kitten/bear.cub".split( '/.')[-2]
bear
您的其他问题可以使用基于RegEx的-csplit
运算符使用
来解决。
nonconsuming positive lookahead和
最后的-join ' '
,用于将数组元素与空格连接起来。
$str = "dog.puppy/cat.kitten/bearOneTwoThree.cub"
$str = $str.split('/.')[-2] -csplit '(?=[A-Z])' -join ' '
$str
bear One Two Three