我正在尝试使用R中的stringer包识别单词之间的空格,但不能识别单词和符号之间的空格(反之亦然)或单词和数字之间的空格(反之亦然)数字。
根据我的发现,[A-Za-z] [:space:] [a-zA-Z]应该可以工作。我显然缺少了一些东西,但不确定是什么。
我已经尝试使用[A-Za-z] [:space:] [a-zA-Z]的字符串语法,以及[A-Za-z]等空格的regex(?)语法] \ s + [a-zA-Z]
str_replace_all(x, [A-Za-z][:space:][a-zA-Z], "_")
有时我会得到的错误是“ rep(value,length.out = nrows)错误:尝试复制'closure'类型的对象”
答案 0 :(得分:1)
您可以使用
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)
请参见regex demo
详细信息
(?<=\p{L})
-与后面紧跟任何字母的位置相匹配的正向外观\s
-空格(\s+
匹配1个以上空格)(?=\p{L})
-一个正向超前匹配位置,该位置与后面紧跟任何字母的位置相匹配。注意:
\\p{L}
替换为[A-Za-z]
。