我有一个如下所示的数组:
> uniq_words
=> ["Welcome",
"Occurred",
"John (CPA)",
"{",
"if(",
")",
"//",
"target",
"=",
"}",
"else",
"target.style.display",
"The",
"web",
"site"]
如您所见,此数组中有一些元素是代码位,并且{
和(
。
这是它变得棘手的地方,我想要做的是删除明显不是单词的元素 - 所以像=
,}
,if(
和)
应该被删除(或*&^%$
等任何其他符号。)
但关键是背景。
John (CPA)
不应该被剥夺,Mr. Smith
或Johnson & Johnson
等也不应该被剥夺。
那么我该如何清理这些元素的uniq_words
?我想我可能会使用.select
和一些正则表达式,但是如何将所有部分组合在一起?
修改1
Per Cary的评论,我基本上要做的是搜索网站上的所有文字以查找姓名。但是,某些名称可能包含旁边的标题(如John Brown (MBA)
)。所以我不希望任何字符串显然不是一个字,几乎肯定不是一个名字。由于显而易见的原因,空间是必须的。
我不需要正则表达式来完全匹配名称,因为我知道这几乎是不可能的,我只是不希望它允许明显的非单词(例如//
或=
或{{ 1}},不排除(
)等有效字符串。
我希望澄清它。
答案 0 :(得分:1)
在你澄清之后,我想出的最好的是:
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)"]
常客正在使用proper unicode character classes来匹配“Köhl”和/或“Liña”等名称。