删除 R 中破折号周围的空格

Removing spaces surrounding dashes in R

我有一个形式为 [1] "James KNIGHT – S" 的字符串,我希望它显示为 [1] "James KNIGHT–S"(通常有更多的文本前置和继续)。在我的测试用例中,我可以使用 gsubstr_replace_all 例如:

gsub(" - ", "-", x)

但在我的字符串中,这不起作用(两者都是 utf-8)。我正在尝试找出如何寻找不同类型的破折号(em、en 等?),以确保我以后可以 select(并删除)这些破折号,并想知道这是否是这里的问题,或者是否我还缺少其他东西。 IE。我不知道测试用例和文件数据之间有什么不同。理想情况下,任何带有空格的破折号和单词都会折叠成“-”。

我们可以使用 \p{Pd} 来匹配 em, en unicode 破折号。在这里,我使用正则表达式环视来匹配破折号之前或之后的一个或多个空格 (\s+),并将其替换为 ''

gsub("\s+(?=\p{Pd})|(?<=\p{Pd})\s+", "", str1, perl=TRUE)

如果需要保持一致,所有破折号都可以用简单的“-”代替:

gsub("\p{Pd}", "-", str1, perl=TRUE)