我有一个[1] "James KNIGHT – S"
形式的字符串,我想要阅读[1] "James KNIGHT–S"
(通常会有更多文字提前和继续)。在我的测试用例中,我可以使用gsub
或str_replace_all
例如:
gsub(" - ", "-", x)
但是在我的字符串中,这不起作用(两者都是utf-8
)。我试图找出如何查找不同类型的破折号(em,en等),以确保我可以稍后选择(并删除)这些破折号,并想知道这是否是这里的问题,或者如果我错过了其他的东西。即我无法解决测试用例和文件数据之间的不同之处。理想情况下,任何带有空格和字词的短划线都会折叠为" - "。
答案 0 :(得分:3)
我们可以使用\\p{Pd}
来匹配em, en
unicode短划线。在这里,我使用正则表达式的外观来匹配破折号之前或之后的一个或多个空格(\\s+
),并将其替换为''
。
gsub("\\s+(?=\\p{Pd})|(?<=\\p{Pd})\\s+", "", str1, perl=TRUE)
如果需要保持一致性,可以用简单的' - '代替所有破折号:
gsub("\\p{Pd}", "-", str1, perl=TRUE)