我有我正在R中清理的文本。我想使用stringi,但很高兴使用其他软件包。
其中一些单词分为两行。所以我得到一个子字符串“ halfword- \ nsecondhalfword”。
我也有一些只是“ ---- \ nword”和“-\ n”的字符串(以及其他一些我不想替换的字符串。
我想要做的是识别所有子字符串“ [a-z]-\ n”,然后保留通用字母[a,z],但删除-\ n字符。
我不想删除所有-\ n,也不想删除字母[a-z]。
谢谢!
答案 0 :(得分:0)
您可以使用单词边界仅在两个单词字符之间匹配-<LF>
:
gsub("\\b-\n\\b", "", x)
gsub("(*UCP)\\b-\n\\b", "", x, perl=TRUE)
stringr::str_replace_all(x, "\\b-\n\\b", "", x)
后两个字符支持任何Unicode单词字符之间的单词边界。
请参见regex demo。
如果您只想删除字母之间的-<LF>
,则可以使用
gsub("([a-zA-Z])-\n([a-zA-Z])", "\\1\\2", x)
gsub("(\\p{L})-\n(\\p{L})", "\\1\\2", x, perl=TRUE)
stringr::str_replace_all(x, "(\\p{L})-\n(\\p{L})", "\\1\\2")
如果只需要支持小写字母,请在前A-Z
中删除gsub
,在后两个中将\p{L}
替换为\p{Ll}
。
请参见this regex demo。