编辑:
我想在文本中的特定未知单词之前放置一个\n
。我知道第一次在我的文本中出现未知单词将在“树”和“湖”之间
实施例。文字:
text
[1] "TreeRULakeSunWater"
[2] "A B C D"
编辑:
“树”和“湖”永远不会改变,但它们之间的词总是在变化,所以我不在我的regex
我目前在做什么:
if (grepl(".*Tree\\s*|Lake.*", text)) { text <- gsub(".*Tree\\s*|Lake.*", "\n\\1", text)}
我上面所做的问题是,gsub
会将所有text
分开,只留下\nRU
。
text
[1] "\nRU"
我也尝试过:
if (grepl(".*Tree *(.*?) *Lake.*", text)) { text <- gsub(".*Tree *(.*?) *Lake.*", "\n\\1", text)}
text
之后我希望gsub
看起来像什么:
text
[1] "Tree \nRU LakeSunWater"
[2] "A B C D"
编辑:
来自Wiktor Stribizew的评论我能够成功gsub
gsub("Tree(\\w+)Lake", "Tree \n\\1 Lake", text)
但这只会在“RU”介于“Tree and”Lake“之间的情况下执行gsub,这是未知单词的第一次出现。未知单词在这种情况下”RU“会出现多次在文本中,当“RU”是一个完整的单词时,我想将\n
放在每个“RU”出现的前面。
新的Ex。文本。
text
[1] "TreeRULakeSunWater"
[2] "A B C RU D"
新的Ex。我想要的是什么:
text
[1] "Tree \nRU LakeSunWater"
[2] "A B C \nRU D"
任何帮助将不胜感激。如果需要进一步的信息,请告诉我。
答案 0 :(得分:1)
您需要首先在
unknown_word <- gsub(".*Tree(\\w+)Lake.*", "\\1", text)
模式匹配字符串中最后Tree
的所有字符,然后捕获未知单词(\w+
=一个或多个单词字符)直到Lake
,然后匹配其余的字符串。它替换了向量中的所有字符串。您可以通过[[1]]
索引访问第一个。
然后,当您知道该单词时,请将其替换为
gsub(paste0("[[:space:]]*(", unknown_word[[1]], ")[[:space:]]*"), " \n\\1 ", text)
请参阅IDEONE demo。
此处,您有[[:space:]]*(
+ unknown_word [1] + )[[:space:]]*
模式。它匹配未知单词两端的零个或多个空格,以及未知单词本身(捕获到组1中)。在替换中,空格缩小为1(如果没有,则添加),然后\\1
恢复未知单词。您可以将[[:space:]]
替换为\\s
。
<强>更新强>
如果您只需要在RU
之前添加整个单词的换行符号,请使用\b
字边界:
> gsub(paste0("[[:space:]]*\\b(", unknown_word[[1]], ")\\b[[:space:]]*"), " \n\\1 ", text)
[1] "TreeRULakeSunWater" "A B C \nRU D"