【发布时间】:2017-02-07 06:54:09
【问题描述】:
可以过滤符合简单条件的项目以匹配 Julia 中的字符串:
y = ["1 123","2512","31 12","1225"]
filter(x-> ' ' in x, y)
[出]:
2-element Array{String,1}:
"1 123"
"31 12"
但是我如何获得相反的结果,我想将不符合条件的项目保留在过滤器中?
这个语法不对:
> y = ["1 123","2512","31 12","1225"]
> filter(x-> !' ' in x, y)
MethodError: no method matching !(::Char)
Closest candidates are:
!(::Bool) at bool.jl:16
!(::BitArray{N}) at bitarray.jl:1036
!(::AbstractArray{Bool,N}) at arraymath.jl:30
...
in filter(::##93#94, ::Array{String,1}) at ./array.jl:1408
也不是类似 Python 的:
> y = ["1 123","2512","31 12","1225"]
> filter(x-> ' ' not in x, y)
syntax: missing comma or ) in argument list
此外,我还尝试使用正则表达式:
> y = ["1 123","2512","31 12","1225"]
> filter(x-> match(r"[\s]", x), y)
TypeError: non-boolean (RegexMatch) used in boolean context
in filter(::##95#96, ::Array{String,1}) at ./array.jl:1408
除了检查字符串中是否有空格之外,如何使用match() 和正则表达式从字符串列表中过滤掉项目?
【问题讨论】:
-
预期的输出是
["2512", "1225"],对吧? -
是的。它是
["2512", "1225"],但问题更笼统,询问如何在match()条件下使用filter()。
标签: regex lambda filter match julia