簡體   English   中英

如何在R中的兩個單詞之間的文本上進行gsub?

[英]How to gsub on the text between two words in R?

編輯:

我想在文本中的特定未知單詞之前放置一個\\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)}

我在上面所做的問題是gsub將所有text子化並只留下\\nRU

text
[1] "\nRU"

我也試過:

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

我希望textgsub之后的樣子:

text
[1] "Tree \nRU LakeSunWater"
[2] "A B C D"

編輯:

根據 Wiktor Striizew 的評論,我能夠成功執行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)

該模式匹配字符串中直到最后一個Tree任何字符,然后捕獲直到Lake的未知單詞( \\w+ = 一個或多個單詞字符),然后匹配字符串的其余部分。 它替換向量中的所有字符串。 您可以通過[[1]]索引訪問第一個。

然后,當你知道這個詞時,把它替換為

gsub(paste0("[[:space:]]*(", unknown_word[[1]], ")[[:space:]]*"), " \n\\1 ", text)

請參閱IDEONE 演示

在這里,您有[[:space:]]*( + unknown_word[ 1 ] + )[[: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"   

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM