如何让R中正则替换连字符时区分大小写,避免误合并特定词汇
解决德语文本PDF换行连字符移除的例外情况
我来帮你搞定这个问题!你的核心需求是只移除PDF换行导致的连字符拆分(比如Ex-\n ample变成Example),但要保留像Regierungs- und Verwaltungsgesetz这种带连接词und的正常结构,对吧?
我们只需要给正则表达式加一个负向先行断言,就能精准排除连字符后跟着und的情况,同时修正原正则里的小问题。修改后的函数如下:
library(tidyverse) bye_bye_hyphenation <- function(x){ # 移除PDF换行导致的连字符拆分,同时保留带"und"的正常结构 stringr::str_replace_all(x, "([a-zA-Z\\x7f-\\xff]+)\\-\\s+(?!und)([a-zA-Z\\x7f-\\xff]+)", "\\1\\2") }
关键修改点说明:
- 去掉了原正则里多余的
|:原写法[a-z|A-Z\\x7f-\\xff]里的|会被当成普通字符匹配,其实我们只需要枚举大小写字母和欧洲特殊字符,改成[a-zA-Z\\x7f-\\xff]+更准确简洁 - 添加了
(?!und)负向先行断言:意思是只有当连字符+空格后面不是und的时候,才执行替换操作,完美避开你想保留的情况 - 把
[\\s]{1,}简化成\\s+:两者效果完全一致,但后者更符合正则的简洁写法
测试效果
我们来验证两个场景:
# 测试换行拆分的单词,正常合并 bye_bye_hyphenation("Ex-\n ample") #> [1] "Example" # 测试带"und"的结构,完全保留原样 bye_bye_hyphenation("Regierungs- und Verwaltungsgesetz") #> [1] "Regierungs- und Verwaltungsgesetz"
如果之后需要排除其他德语连接词(比如oder),只需要把断言改成(?!und|oder)就可以啦!
内容的提问来源于stack exchange,提问作者Balthasar
相关产品推荐
相关产品推荐

