Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何在R中的两个单词之间对文本进行gsub?_Regex_R_Gsub - Fatal编程技术网

Regex 如何在R中的两个单词之间对文本进行gsub?

Regex 如何在R中的两个单词之间对文本进行gsub?,regex,r,gsub,Regex,R,Gsub,编辑: 我想在我的文本中的一个特定的未知单词前面放置一个\n。我知道第一次出现在我的文本中的未知词将介于“树”和“湖”之间 文本示例: text [1] "TreeRULakeSunWater" [2] "A B C D" 编辑: “树”和“湖”永远不会改变,但它们之间的单词总是在变化,所以我不会在我的regex中寻找“RU” 我目前正在做的事情: if (grepl(".*Tree\\s*|Lake.*", text)) { text <- gsub(".*Tree\\s*|L

编辑:

我想在我的文本中的一个特定的未知单词前面放置一个
\n
。我知道第一次出现在我的文本中的未知词将介于“树”和“湖”之间

文本示例:

text
[1]  "TreeRULakeSunWater" 
[2]  "A B C D"
编辑:

“树”和“湖”永远不会改变,但它们之间的单词总是在变化,所以我不会在我的
regex中寻找“RU”

我目前正在做的事情:

if (grepl(".*Tree\\s*|Lake.*",  text)) { text <- gsub(".*Tree\\s*|Lake.*", "\n\\1", text)}
我也尝试过:

if (grepl(".*Tree *(.*?) *Lake.*",  text)) { text <- gsub(".*Tree *(.*?) *Lake.*", "\n\\1", text)}
编辑:

根据Wiktor Stribizew的评论,我能够成功地
gsub

gsub("Tree(\\w+)Lake", "Tree \n\\1 Lake", text)
但这只会对“RU”位于“Tree”和“Lake”之间的情况进行gsub,这是未知词的第一次出现。未知词和本例中的“RU”将在文本中多次出现,我想在“RU”是一个完整的词时,将
\n
放在“RU”的每个出现之前

新的文本示例

text
[1] "TreeRULakeSunWater"
[2] "A B C RU D"
我想要的新例子:

text
[1] "Tree \nRU LakeSunWater"
[2] "A B C \nRU D"
任何帮助都将不胜感激。如果需要更多信息,请告诉我。

您需要先找到“树”和“湖”之间的未知单词。您可以使用

unknown_word <- gsub(".*Tree(\\w+)Lake.*", "\\1", text)

在这里,您有
[[:space:][]*(
+未知单词[]+
)[[:space:][]*
模式。它匹配未知单词两端的零个或多个空格,以及未知单词本身(捕获到组1中)。在替换中,空格缩小为1(如果没有空格,则添加)然后
\\1
还原未知单词。您可以用
\\s
替换
[:space:][]

更新

如果只需要在整词的
RU
之前添加换行符,请使用
\b
词边界:

> gsub(paste0("[[:space:]]*\\b(", unknown_word[[1]], ")\\b[[:space:]]*"), " \n\\1 ", text)
[1] "TreeRULakeSunWater" "A B C \nRU D"   

?谢谢你的评论。我已经编辑了我的问题。你如何指定如何在文本中识别
RU
?两个连续的大写字母?试试看。在这种情况下,最后一个例子
RU
没有被“Tree”和“Lake”包围。我希望我理解你的需要。请检查我的答案。谢谢你的回答,它很有效当然,我确实有一个跟踪。在我的文本中,“Ru”出现在许多其他单词的中间。一旦我匹配了这个未知词,我只想在“RU”前面加上一个完整的单词,然后输入“<代码> \n代码/代码>。我将再次编辑我的问题。谢谢你的耐心。这是否意味着你需要实现<代码> [1 ]。TreeRULakeSunWater“A B C\nRU D”
?我将此场景添加到了答案中。请避免多次更改此问题,因为它不被接受。是的,这是可以接受的。第一次不需要
\n
,但它可以。后续的“RU”“s确实需要一个
\n
在它前面。你建议我删除这个问题并问一个新问题吗?为什么要删除它?我只是警告你,以免你未来的问题被否决。
unknown_word <- gsub(".*Tree(\\w+)Lake.*", "\\1", text)
gsub(paste0("[[:space:]]*(", unknown_word[[1]], ")[[:space:]]*"), " \n\\1 ", text)
> gsub(paste0("[[:space:]]*\\b(", unknown_word[[1]], ")\\b[[:space:]]*"), " \n\\1 ", text)
[1] "TreeRULakeSunWater" "A B C \nRU D"