2011-02-01 84 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

相關問題