regex - 在正则表达式匹配后的单词后面插入\n

标签 regex r

假设我有一长串文本,比如一个段落或更多,并且有一个经常出现的特定单词,我们称其为 KEY。

我想在每个 KEY 之后的单词后面插入一个“\n”。

所以,如果我有字符串KEY Hello this is KEY an example。我希望它看起来像KEY Hello\n这是 KEY an\n示例

如果任务稍微简单一些,并且我只想在 KEY 之后添加\n,那么我可以使用 gsub("KEY","KEY\n",string) 轻松做到这一点,但我不认为正则表达式有一种优雅的方式在匹配后选择单词,即使它确实如此,我也不确定是否可以在 gsub 中使用它。

在我想要的位置添加\n 的好方法是什么?

最佳答案

您可以使用捕获组并引用它。正如 Wiktor Stribiżew 指出的那样,你必须决定如何处理某些场景和具体情况。

对于所提供的示例,查找 KEY 后跟一个空格,后跟非空白字符 1 次或多次 (\\S+),后跟一个空格:

gsub("(KEY \\S+ )", "\\1\n", string, perl = TRUE)

如果您想更通用地了解“KEY”后面的内容,那么您可以添加一个字符类,包括您允许的内容(或\s 表示任何空白字符,或\W 表示任何非字母数字/下划线字符,正如维克托指出的那样)。像这样的事情:

gsub("(KEY[., ;!?]\\S+ )", "\\1\n", string, perl = TRUE)
gsub("(KEY\\s\\S+ )", "\\1\n", string, perl = TRUE)
gsub("(KEY\\W+\\S+ )", "\\1\n", string, perl = TRUE)

在字符类部分中放置您想要的任何标点符号[., ;!?]


Wiktor 的变体可能更强大一点:

gsub("(KEY\\s+\\S+\\s*)", "\\1\n", string)  # \s = white-space character
                                            # \S = non-white-space character
gsub("(KEY\\W+\\w+\\s*)", "\\1\n", string) # \w for alphanumeric/underscore
                                           # \W for the opposite of \w.

这些变体不需要在下一个单词后有空格(\\s* 表示 0 个或多个空白字符),并且它们可以匹配 KEY 之后的一个或多个空白字符或一个或KEY 之后有更多非字母数字/下划线。

关于regex - 在正则表达式匹配后的单词后面插入\n,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38624061/

相关文章:

r - 在 y 轴上方添加空间而不用 expand()

javascript - 是否可以匹配 a/g Javascript 正则表达式其余部分的开头?

r - 拆分、应用线性模型、组合

r - ggplot2:颜色作为 y 轴值的函数的条形图

regex - salt-stack 中的正则表达式匹配

r - as.POSIXlt.POSIXct(x, tz) : (converted from warning) unknown timezone 'GMT' 中的错误

R:如何合并更多 2 个数据框并添加值?

java - 字符串的悬挂元字符和正则表达式模式

匹配输入中的 Java 正则表达式

regex - 用于匹配数字序列的正则表达式?