有没有人有一个很好的正则表达式从字符串中剥离所有符号(';。,_ \ $ @!%回车等),而不会损坏任何外来字符(é多فا等)?我想,非正则表达式会更好,但我没有看到任何Ruby或Rails方法。
答案 0 :(得分:4)
什么是符号?这似乎是一个模糊的要求。是&一个符号,即使它只是“和”这个词的简写?是!一个符号,即使它被用作音译一些非洲语言的字母字符?如果$是一个符号,那是否意味着円也是如此?我认为回答这个问题对于提出一个行动方案将有很长的路要走。
我认为你使用正则表达式最接近的是/[^\w\s]/
。 Ruby 1.9的Regexp引擎旨在很好地理解外语,以正确地知道哪些是“单词”字符,所以这将留下那些和空格。在我的测试中,这正确地删除了英语,日语和德语句子中的标点符号,同时保留了周围的字符。但是甜甜圈的美元将会出现边缘情况,几乎可以解决任何问题 - 处理世界上各种各样的语言(其中一些甚至没有我们所知道的单词)这是一项非常复杂的任务。
答案 1 :(得分:3)
执行此操作的好方法是在正则表达式中使用新的(ish)unicode字符类,例如\P{L}
来匹配任何不字母的内容(使用任何语言) )根据unicode。不幸的是,似乎Ruby不支持这一点,即使在1.9。
也许1.9正则表达式解析器足够聪明,不能匹配组成unicode字符中特殊符号的字节,所以简单地枚举所有要剥离的字符都可以工作。这假设你真的可以枚举你想要过滤掉的所有字符,这可能比ASCII中的符号要多得多,比如逻辑非,飞机等......