我的数据:
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
Run Code Online (Sandbox Code Playgroud)
- 名字姓氏
- 名字姓氏带有brakets和J(brakets ocr识别)
- 名字姓氏带连字符
- 名字姓氏带粒子
- 名字姓氏带粒子带刹车
预期产出
Caterina Guonçallvez
Francisco Ro[dr]í[gueJz
Johao de Miranda
Lucas Martinz Mal-Cuzinhado
Francisquo d[e] Arruda
Francisquo de Miranda
Run Code Online (Sandbox Code Playgroud)
名字以大写字母开头
名称的最后一部分后跟一个空格(或带空格的逗号)和一个以小写字母开头的单词,如"braçeyro"或"calçeteyro"(人们的工作)
data < - readLines("clipboard",encoding ="latin1")
我尝试了什么:
^([a-zA-Zàáâäãå????èéêë??ìíîï??òóôöõøùúûü??ÿý??ñç?šžÀÁÂÄÃÅ?????ÈÉÊËÌÍÎÏ???ÒÓÔÖÕØÙÚÛÜ??ŸÝ??ÑßÇŒÆ?ŠŽ?ð])\w+[A-Z ,.'-]\w+
Run Code Online (Sandbox Code Playgroud)
给
Antonio Guomez
Caterina Guon
Francisco Ro
Johao de
Francisquo d
模式(([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 '
Run Code Online (Sandbox Code Playgroud)
这假设您正确设置了区域设置.
正则表达式匹配字母组(和连字符),以大写字母或"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"
Run Code Online (Sandbox Code Playgroud)