|
昨天劍哥說要不要寫一下關(guān)于正則表達式的內(nèi)容,今天看書就正好看到這一章。R for data science總體上感覺講解的還不是特別詳細,我總體按照書來寫,有想要深入學(xué)習(xí)的同學(xué),可以去google搜索,非常多好的內(nèi)容。 同樣,先先加載包: library(tidyverse)library(stringr)1基礎(chǔ)匹配 我們先來看一個例子。用stringr包中的str_view函數(shù)來看一下匹配的含義。
可以看到該函數(shù)將字符串中含有an的對象banana找出來了。這可以算作是精確匹配,那么如果我們想要匹配的是符合一定規(guī)律的怎么辦呢?比如想要匹配中間為字母a,前后為任意字符皆可。這就用到正則表達式了,維基百科定義如下:
比如剛才的例子,就可以這么寫: x <- c('apple', 'banana', 'pear')str_view(string = x, pattern = '.a.')其中的“.”,就代表著任意字符,注意任意,也就是不管是字母,數(shù)字,符號,空格等等,都是可以的。但是問題來了,如果我們需要的是精確匹配“.”本身呢,這時候需要使用反斜杠 “\”對其進行轉(zhuǎn)義,這時候正字表達式就不會將其視作廣義的代表,而是該字符本身了。但是因為\本身在正則表達式中也有其特殊含義,因此他也需要一個反斜杠對其進行轉(zhuǎn)義,也就是說,如果我們想匹配.,我們需要這么寫,\\.,也就是兩個反斜杠。我們舉個例子:
可以看到這樣就可以把點本身精確匹配到了。 那么如果想要匹配```本身呢?需要4個反斜杠。。。因為首先反斜杠出現(xiàn)在字符串中就需要對其進行轉(zhuǎn)義,也就是說表示為一個反斜杠就需要2個,所以,最后就出現(xiàn)了四個反斜杠。另外,最近在看python,python中有原生字符串的概念,所以對于出現(xiàn)反斜杠的字符串,可以直接使用r,就不怕漏掉反斜杠了。 x <- 'a\\b'writeLines(x)#> a\bstr_view(string = x, pattern = '\\\\')那么如果要匹配''\,該怎么寫呢?例子如下: aa''\ 2固定位置進行匹配 比如你想匹配開頭或者結(jié)尾為固定內(nèi)容的對象,在正則表達式中,也有固定符號進行表示。 ^表示開頭。 $表示結(jié)尾。 匹配以字母a開頭的對象:
匹配以字母a結(jié)尾的對象: x <- c('apple', 'banana', 'pear')str_view(string = x, pattern = 'a$')注意兩個符合的位置。 如果想要精確匹配某個字符,這兩個特殊夫就非常有用了:
如果想要精確匹配對象$^$,那么該怎么寫呢? $^$ apple $^$a string包中有一個單詞庫,我們可以用它來聯(lián)系一下,比如,匹配該單詞庫中所有以x開頭的單詞: x <- stringr::wordsstr_view(string = x, pattern = '^x', match = TRUE)匹配所有以y結(jié)尾的單詞:
匹配所有長度為3的對象,注意不可以使用str_length函數(shù) x <- stringr::wordsstr_view(string = x, pattern = '^...$', match = TRUE)匹配所有長度為7及以上的對象,注意同樣不可以使用str_length函數(shù) 特殊字符 從上面可以看出來,其實正則表達式就是特殊字符的組合,用來表示符合規(guī)定的對象,因此特殊字符就尤為重要,我們下面來看看都有哪些特殊字符。 \d:表示任意數(shù)字,d就是digit的意思。 \s:表示任意空白,比如空格,tab等。 [abc]:中括號將里面包含的內(nèi)容,表示任意一個即可,比如[abc]代表的就是a,b或者c。 [^abc]:這表示的是除了a,b和c之外的任意字符。 同樣的,記住,只要反斜杠出現(xiàn),就要同時出現(xiàn)兩個。 寫到這里,電腦沒電了,又忘了帶帶能源,那就正好明天一起,把特殊字符寫完。 公眾號排版很不好看,大家如果使用電腦,可以點擊原文,使用R notebook來寫的。 按照英語字母順序,但是不同地方可能不一樣,比如下面的例子: x <- c('apple', 'eggplant', 'banana') ## [1] 'apple' 'banana' 'eggplant' str_sort(x, locale = 'haw') # Hawaiian ## [1] 'apple' 'eggplant' 'banana' 感覺這個功能不會太常用。了解一下就好了。 ---------------------------------------------------------------------- ------------------------------------------------------------------------ |
|
|
來自: 生物_醫(yī)藥_科研 > 《待分類》