有效删除字符串的标点符号

时间:2018-03-04 07:02:03

标签: string julia

我在文本中阅读并希望删除它的所有标点符号。我的第一个想法是:

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。

有什么想法吗?

4 个答案:

答案 0 :(得分:3)

好像你应该只能使用正则表达式:

#include"stdio.h"
void main()
{
int x=10,a;
x<0 ? a = 100 : a = 1000;
printf(" %d",a);
}

我没有尝试过,因为我机器上的Julia不足以支持广播函数调用。

答案 1 :(得分:2)

当你不想要一个集合(比如一个数组或一个元组)进行广播时,你应该将它包装在一个数组中(在这个例子中,我只使用两个字符,和{{1}作为替换,但这可以更多):

;

关键部分是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"[,;]"的第一个模式会更快一些,但使用正则表达式会更灵活,因为它可以捕获更复杂的模式。

答案 2 :(得分:0)

我无法使上述解决方案起作用。

虽然很复杂,但这仍然可以起作用:

join(replace(split("A.B,C", ""), "."=>"", ","=>""))
"ABC"

答案 3 :(得分:0)

简单地让 Unicode 决定哪些字符是标点符号会很方便:

import datascience
Table().read_table(document_name)

这当然也适用于广播:

julia> import Unicode: ispunct

julia> filter(!ispunct, "a,b;c")
"abc"

同样的谓词也可以很好地与 julia> filter.(!ispunct, ["a,b;c","x,y;z"]) 2-element Array{String,1}: "abc" "xyz" 配合使用(删除前导/尾随标点符号)。