簡體   English   中英

刪除 1) 開頭和結尾模式和 2) 如果沒有結尾模式、開頭模式和結尾之間的字符

[英]Remove characters between 1) opening and closing pattern and 2) if no closing pattern, opening pattern and end

使用兩個gsub調用鏈來解決問題 - 出於好奇,我想知道是否有更短的正則表達式來實現我想要實現的目標。 (使用從 R 中刪除兩個字符串模式之間的字母的解決方案)

我想刪除某個模式出現之間的所有字符,或者 - 如果沒有“結束模式”,則在“開始”模式和結束之間。

foostring <- c("First test *** no asterisks at the end", 
               "Second test *** asterisks in the middle *** something different",
               "Third test *** more than one asterisk *** something different *** second asterisk ***",
               "Fourth test *** asterisks followed by a special character ***_something different")

# desired output with chain of gsubs

gsub("\\*{3}.*$", "", gsub("\\*{3}.*?\\*{3}", "", foostring)) 
#> [1] "First test "                      "Second test  something different"
#> [3] "Third test  something different " "Fourth test _something different"

您可以使用

gsub("\\*{3}.*?(?:\\*{3}|$)", "",  foostring)

查看R 在線演示

TRE 正則表達式意味着:

  • \\*{3} - 三個星號
  • .*? - 盡可能少的零個或多個字符
  • (?:\\\\*{3}|$) - 非捕獲組匹配
    • \\*{3} - 三個星號
    • | - 或者
    • $ - 字符串的結尾。

暫無
暫無

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

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