2011-02-01 86 views
0

我解析一个文本,我想忽略人的名字。Ruby正则表达式:删除名字,留下姓氏

实例(例):

  • B.Obama =>奥巴马
  • B.奥巴马=>奥巴马
  • 乙。奥巴马=>奥巴马

我设法写这方面的工作正则表达式的红宝石:

"B.Obama".gsub(/\p{L}+\.(\p{L}+)/, '\\1') 

但是,它只能解决一个案件。另外,如果第一个字母是大写,它不检查。

那么,应该如何结合所有这些情况下的正则表达式?

详细信息:Ruby 1.92和UTF-8字符串。

+3

有*没有办法*解析名称,而不是与正则表达式,没有任何其他工具。名字对于这个太可变了。比较`Christoph Willibald Gluck`和`FedericoGarcíaLorca`。你怎么知道`Willibald`是一个给定的名字,'García`是姓氏的一部分? – 2011-02-01 10:48:58

+1

相关问题:http://stackoverflow.com/questions/4731730/parsing-human-names-and-matching-them-in-ruby – 2011-02-01 22:10:25

回答

1

我给它多一点想法,我喜欢这更好:

/^(\w+)[ .,](.+$)/ 

这将在不同的捕获组 即

"Mark del cato".scan /^(\w+)[ .,](.+$)/ 

看到同时捕获的第一个名字和姓氏例如红色:Rubular

或试试

^[^ .]+ 

这将拾取一行上的第一个单词。这不是由点或空格分隔的。 希望它有帮助,看例如Rubular

0

尝试

(\w+)$ 

\w+匹配一个或多个 '字' 字。

$是匹配字符串末尾的零长度匹配。

你想从一段文字中拉出第二个名字吗?这可能会变得非常困难。你能发表文章的摘录吗?

+0

如果姓氏是“del Cacto”? – 2011-02-01 10:11:46

相关问题