[英]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)}
我希望text
在gsub
之后的樣子:
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.