如果我有一个字符串数组(其中包括符号),我如何去除符号构成非单词的元素?



我有一个像这样的数组:

> uniq_words
=> ["Welcome",
 "Occurred",
 "John (CPA)",
 "{",
 "if(",
 ")",
 "//",
 "target",
 "=",
 "}",
 "else",
 "target.style.display",
 "The",
 "web",
 "site"]

正如你所看到的,这个数组中有一些元素是位码,并且有{(

这就是它变得棘手的地方,我想做的是剥离显然是非单词的元素-所以像=, }, if()这样的东西应该被剥离(或任何其他符号,如*&^%$等)。

但关键是上下文。

John (CPA)不应该被剥离,Mr. SmithJohnson & Johnson也不应该被剥离,等等

那么我如何清除uniq_words中的这些元素呢?我想我可能会使用.select和一些正则表达式,但是所有的部分看起来如何?

编辑1

根据Cary的评论,我实际上是在网站上搜索所有的名字。但是,有些名称可能在它们旁边包含标题(如John Brown (MBA))。所以我不希望任何字符串明显不是单词,也肯定不是名字。空格是必须的,原因很明显。

我不需要正则表达式完全匹配名称,因为我知道这几乎是不可能的,我只是不希望它允许明显的非单词(例如//=(,而不排除有效的字符串,如John Brown (Esq.))。

经过你的解释,我想出的最好的是:

input.grep(/A[p{Alnum}s]+(([p{Alnum}s]+))?z/)
#⇒ [
#  [0] "Welcome",
#  [1] "Occurred",
#  [2] "John (CPA)",
#  [3] "target",
#  [4] "else",
#  [5] "The",
#  [6] "web",
#  [7] "site"
# ]

删除后面的问号以搜索只有标题的名称:

input.grep(/A[p{Alnum}s]+(([p{Alnum}s]+))z/)
#⇒ ["John (CPA)"]

正则使用正确的unicode字符类来匹配像" Köhl "和/或" Liña "这样的名称。

相关内容

最新更新