我正在尝试使用 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]
。