2017-08-13 118 views
0

考慮自己在正則表達式新手,我碰到一個R-腳本最終將擦去的空格從一個字符串或來(說)一條線使用gsub()。 以下是GSUB()函數用(在我看來)一個複雜的規則爲:匹配:

gsub("(^ +)|(+$)", "", line) 

任何人都可以解釋我是什麼表情呢?徹底!

一個例子會讓這麼簡單。

請還提供一些鏈接在那裏我可以學到一些真正的東西約正則表達式,因爲我發現沒有很好的來源,當我尋找相同。

感謝您的考慮。

+0

圓括號(正則表達式中的捕獲組)在這種用法中沒有做任何事情;你可以使用'gsub('^ + | + $','','foo')' – alistaire

回答

3

正則表達式只是修整字符串中的空間,使用基本R函數trimws會更清晰我認爲。


(^ +)|(+$)

  1. ^字符串開始位置。
  2. +(space plus)多於一個空格。
  3. $字符串結束位置。
  4. |另類。
+2

信不信由你,基礎'trimws()'函數實際上比較慢。差異很小,但是hashir的正則表達式快了4-5倍。看看這裏的結果:http://www.r-fiddle.org/#/fiddle?id=6QFS7LaX –

+1

@AndrewBrēza謝謝,我會編輯我的答案。看起來'trimws'是使用'sub'在內部純R編寫的,而不是我認爲的C。 – aristotll

+1

該測試太小而無意義。如果您重新採樣到10k左右的矢量,「trimws」大約快兩倍。根據您的R版本,添加'perl = TRUE'將使它們大致相等,因爲它現在得到JIT編譯(主要)。 – alistaire