捕捉复杂的名字

时间:2016-05-21 14:21:25

标签: regex r

我的数据:

Caterina Guonçallvez braçeyro 
Francisco Ro[dr]í[gueJz luveyro
Johao de Miranda calçeteyro 
Lucas Martinz Mal-Cuzinhado, braçeyro 
Francisquo d[e] Arruda braçeyro 
Francisquo de Miranda braçeyro 

- 名字姓氏
- 带名牌的第一个姓氏和J(brakets ocr recognition)
- 带连字符的名字姓氏
- 带粒子的名字姓氏
- 带有brakets的粒子的名字姓氏

预期输出

Caterina Guonçallvez
Francisco Ro[dr]í[gueJz
Johao de Miranda
Lucas Martinz Mal-Cuzinhado
Francisquo d[e] Arruda
Francisquo de Miranda
  • 名称以大写字母开头

  • 名称的最后一部分后跟一个空格(或带空格的逗号)和一个以小写字母开头的单词,如“braçeyro”或“calçeteyro”(人们的工作)

    data< - readLines(“clipboard”,encoding =“latin1”)

我尝试了什么:

^([a-zA-ZàáâäãåąčćęèéêëėįìíîïłńòóôöõøùúûüųūÿýżźñçčšžÀÁÂÄÃÅĄĆČĖĘÈÉÊËÌÍÎÏĮŁŃÒÓÔÖÕØÙÚÛÜŲŪŸÝŻŹÑßÇŒÆČŠŽ∂ð])\w+[A-Z ,.'-]\w+

给予
Antonio Guomez
Caterina Guon
Francisco Ro
Johao de
Francisquo d

1 个答案:

答案 0 :(得分:6)

模式(([A-Z][\w\[\]-]+|de|d\[e\])\s?)+返回:

'Caterina Guonçallvez '
'Francisco Ro[dr]í[gueJz '
'Johao de Miranda '
'Lucas Martinz Mal-Cuzinhado'
'Francisquo d[e] Arruda '
'Francisquo de Miranda '

这假设您正确设置了区域设置。

正则表达式匹配字母组(和连字符),以大写字母或“de”开头,后跟可选空格。这意味着您需要去除字符串以删除尾随空格。

编辑:证明它适用于R:

> Sys.setlocale("LC_ALL","en_us.UTF-8")
> library(stringr)
> x <- "Caterina Guonçallvez braçeyro "
> str_match(x, '(([A-Z][\\w\\[\\]-]+|de|d\\[e\\])\\s?)+')
     [,1]                    [,2]           [,3]         
[1,] "Caterina Guonçallvez " "Guonçallvez " "Guonçallvez"