r语言 - 仅替换两个单词之间的空格,而不替换单词和符号或单词和数字之间的空格



我正在尝试使用 R 中的纵梁包来识别单词之间的空格,但不识别单词和符号之间的空格(反之亦然(或单词和数字(反之亦然(,或符号和数字。

根据我能找到的,似乎[A-Za-z][:space:][a-zA-Z]应该可以工作。我显然错过了一些东西,但不确定是什么。

我已经尝试了带有 [A-Za-z][:space:][a-zA-Z] 的字符串语法,以及空格的正则表达式(?( 语法,例如 [A-Za-z]\s+[a-zA-Z]

str_replace_all(x, [A-Za-z][:space:][a-zA-Z], "_")

有时我会得到一个错误是"rep(value, length.out = nrows( 中的错误:尝试复制类型为'closure'的对象">

您可以使用

str_replace_all(x, "(?<=\p{L})\s(?=\p{L})", "_")
gsub("(?<=\p{L})\s(?=\p{L})", "_", x, perl=TRUE)

或者,如果有 1 个或多个空格要替换为 1 个_

str_replace_all(x, "(?<=\p{L})\s+(?=\p{L})", "_")
gsub("(?<=\p{L})\s+(?=\p{L})", "_", x, perl=TRUE)

查看正则表达式演示

  • (?<=p{L})- 与紧靠任何字母的位置匹配的正面查看
  • s- 空格(s+匹配 1+ 空格(
  • (?=p{L})- 与紧跟任何字母的位置相匹配的正面展望。

  • 您应该用引号包装正则表达式模式以形成字符串文字
  • 如果只想支持 ASCII 字母,可以将\p{L}替换为[A-Za-z]

最新更新