我的数据:
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
答案 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"