2016-07-25 54 views

回答

3

如果使用^.|(\d+)(?!.*\d),這個模式將只匹配的第一個字符,並與sub將其刪除,並會刪除第一個字符和最後1+數字,如果與gsub一起使用,則在替換模式中沒有反向引用。見this pattern demo

您可以使用

sub("^(.).*(\\d).*$", "\\1\\2", "ABCD some random words and spaces 1234") 

R demoregex demo

這TRE正則表達式匹配模式:

  • ^ - 串
  • (.)的開始 - 第1組捕獲任何字符
  • .* - 0+任何字符儘可能多地到最後..
  • (\\d) - 第2組捕獲一個數字
  • .* - 其餘的字符串
  • $ - 字符串結尾。

\\1\\2替換模式重新將組1和組2中捕獲的值重新插入結果。

+0

謝謝。作爲一個側面問題,人們如何去學習Regex?網上似乎有大量的資源,但它是如此之多。 – Clarinetist

+1

有一個問題,是的。在Base R中,如果不使用'perl = TRUE'參數,則可以在TRE正則表達式(在'grep','sub'等等)之間進行選擇。如果你使用它,你將不得不使用PCRE正則表達式。使用stringr/stringi等,您需要閱讀有關ICU正則表達式。網上有很多資源,但有「官方」頁面。 [* PCRE - Perl Compatible Regular Expressions *](http://www.pcre.org),[* ICU *](http://userguide.icu-project.org/strings/regexp),[* TRE *] (http://laurikari.net/tre/documentation/regex-syntax/)。 –

相關問題