R语言正则表达式提取开头大写职业字符串问题求助
R语言正则提取开头大写职业内容的解决方案
问题描述
现有如下脏数据,需要提取字符串开头的大写内容(对应人员职业):
| ID | Strings |
|---|---|
| A1 | INGÉNIEUR AGRO. (+ DEA pédologie + IAE). 27 ans whatever whatever. |
| A2 | ARCHITECTE DPLG 29 ans. 6 ans d’exp. prof, blablablabla |
| A3 | PROJETEUR-COMPOSITEUR- ARCHITECTURE 32 ans. |
期望提取结果:
| ID | 提取结果 |
|---|---|
| A1 | INGÉNIEUR AGRO |
| A2 | ARCHITECTE DPLG |
| A3 | PROJETEUR-COMPOSITEUR- ARCHITECTURE |
当前使用的代码无法适配所有情况:
data.frame %>% mutate(job = str_extract(string, "[[:upper:]]{2,}.+\\W"))
存在的问题:
- A1会错误包含末尾的
.,无法精准截断到AGRO - A3无法完整提取
ARCHITECTURE,匹配逻辑不符合结构
解决方案
使用精准正则匹配开头连续的大写内容(涵盖带重音的大写字母、连字符、空格分隔的结构),直到遇到数字或小写字母为止。
正则表达式说明
^[[:upper:ÉÀÈÙÊÎÔÛÄËÏÖÜ]+(?:[- ]?[[:upper:ÉÀÈÙÊÎÔÛÄËÏÖÜ]+)*
^:锁定字符串开头位置[[:upper:ÉÀÈÙÊÎÔÛÄËÏÖÜ]+:匹配至少一个大写字母(含法语带重音的大写字符)(?:[- ]?[[:upper:ÉÀÈÙÊÎÔÛÄËÏÖÜ]+)*:非捕获组,匹配可选的连字符/空格后接大写字母的组合,可重复多次,确保连字符连接、空格分隔的大写词都能被完整捕获
完整代码示例
library(dplyr) library(stringr) # 示例数据框 df <- data.frame(ID = c("A1", "A2", "A3"), Strings = c("INGÉNIEUR AGRO. (+ DEA pédologie + IAE). 27 ans whatever whatever.", "ARCHITECTE DPLG 29 ans. 6 ans d’exp. prof, blablablabla", "PROJETEUR-COMPOSITEUR- ARCHITECTURE 32 ans.")) # 提取职业内容 df <- df %>% mutate(job = str_extract(Strings, "^[[:upper:ÉÀÈÙÊÎÔÛÄËÏÖÜ]+(?:[- ]?[[:upper:ÉÀÈÙÊÎÔÛÄËÏÖÜ]+)*")) # 输出结果 print(df)
运行后输出结果:
ID Strings job 1 A1 INGÉNIEUR AGRO. (+ DEA pédologie + IAE). 27 ans whatever whatever. INGÉNIEUR AGRO 2 A2 ARCHITECTE DPLG 29 ans. 6 ans d’exp. prof, blablablabla ARCHITECTE DPLG 3 A3 PROJETEUR-COMPOSITEUR- ARCHITECTURE 32 ans. PROJETEUR-COMPOSITEUR- ARCHITECTURE
补充说明
如果后续遇到其他特殊符号的大写职业结构,可在字符组[[:upper:ÉÀÈÙÊÎÔÛÄËÏÖÜ]]中添加对应符号(如.需转义),当前正则已覆盖示例所有场景。
内容的提问来源于stack exchange,提问作者PierreGeorge
相关产品推荐
相关产品推荐

