这个相当简单的朱莉娅问题让我有点困惑。
假设我有一个“xxx_xxx”形式的字符串数组。是否有一个函数可以删除“_”之后的所有内容?
例子
names = ["last1_first1","last2_first2"]
Run Code Online (Sandbox Code Playgroud)
有没有一个简单的函数可以返回
["last1","last2"]
Run Code Online (Sandbox Code Playgroud)
您正在寻找split
:
julia> names = ["last1_first1", "last2_first2"]
2-element Array{String,1}:
"last1_first1"
"last2_first2"
julia> split.(names, "_")
2-element Array{Array{SubString{String},1},1}:
["last1", "first1"]
["last2", "first2"]
Run Code Online (Sandbox Code Playgroud)
请注意,我在这里使用点广播语法split.()
将split
函数按元素应用于名称数组。
为了完整起见,提取last
元素的一种方法是:
julia> hcat(split.(names, "_")...)[1, :]
2-element Array{SubString{String},1}:
"last1"
"last2"
Run Code Online (Sandbox Code Playgroud)
正如卡梅伦在评论中指出的那样,如果它是(如本示例中所示)您要查找的第一个元素,您可以将hcat
和 splatting 替换为:
julia> first.(split.(names, "_"))
2-element Array{SubString{String},1}:
"last1"
"last2"
Run Code Online (Sandbox Code Playgroud)
对于需要n
th 索引的情况,这稍微不太灵活。对于这些情况,您可以广播getindex
并向其传递您所在元素的索引:
julia> julia> getindex.(split.(names, "_"), 2)
2-element Array{SubString{String},1}:
"first1"
"first2"
Run Code Online (Sandbox Code Playgroud)
或者在您自己的答案中建立正则表达式的想法,您可以简单地执行以下操作:
julia> replace.(names, r"_.*" => "")
2-element Array{String,1}:
"last1"
"last2"
Run Code Online (Sandbox Code Playgroud)
我只是遇到一些语法问题
names[:] = map((x) -> replace(x,r"_.*",""),names[:])
Run Code Online (Sandbox Code Playgroud)