我读了一段文字,想删除它的所有标点符号。我的第一个想法是:
data = readlines("text.txt")
data = lowercase.(data)
data = replace.(data, [','], [""])
data = replace.(data, ['.'], [""])
data = replace.(data, ['?'], [""])
data = replace.(data, [';'], [""])
data = replace.(data, ['!'], [""])
data = replace.(data, [':'], [""])
data = replace.(data, ['('], [""])
data = replace.(data, [')'], [""])
这变得非常烦人。我没有找到一种方法将它们全部组合在一个语句中。使用
replace.(data, [".", ";"], ["", ""])
我得到一个 DimensionMismatch。有任何想法吗?
最佳答案
广播时,如果您不想迭代集合(如数组或元组),则应将其包装在数组中(在示例中,我仅使用两个字符 ,
和 ;
作为替代,但这可以更多):
julia> data = ["a,b;c","x,y;z"]
2-element Array{String,1}:
"a,b;c"
"x,y;z"
julia> replace.(data, [[',',';']], "")
2-element Array{String,1}:
"abc"
"xyz"
关键部分是
[[',',';']]
,它将替换替代数组包装到一个元素数组中。另一种方法是使用正则表达式:
julia> replace.(data, r"[,;]", "")
2-element Array{String,1}:
"abc"
"xyz"
现在替换模式
r"[,;]"
不需要被包装。如果您关心性能,使用
[[',',';']]
的第一个模式会快一点,但使用正则表达式更灵活,因为它允许您捕获更复杂的模式。编辑
现在它将是:
julia> replace.(data, [',',';'] => "")
2-element Array{String,1}:
"abc"
"xyz"
或者
julia> replace.(data, r"[,;]" => "")
2-element Array{String,1}:
"abc"
"xyz"
关于string - 有效去除字符串标点符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49092853/