找到一个具有通用字符 '[a,z]-\n' 的子字符串,并替换子字符串的非通用部分 '-\n'

Locate a sub-string with a general character '[a,z]-\n' and replace the non-general part of the sub-string '-\n'

我正在 R 中清理文本。我想使用 stringi,但很乐意使用其他包。

有些单词分两行。所以我得到一个子字符串 "halfword-\nsecondhalfword"。

我还有一些字符串,它们只是“----\nword”和“-\n”(以及其他一些我不想替换的字符串。

我想要做的是识别所有子字符串“[a-z]-\n”,然后保留通用字母 [a,z],但删除 -\n 字符。

我不想删除所有 -\n ,我也不想删除字母 [a-z]。

谢谢!

您可以使用单词边界来匹配 -<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")

如果只需要支持小写字母,去掉第一个gsub中的A-Z,将后两个\p{L}替换为\p{Ll}

this regex demo