R語言之正則表達式


 

常見與正則表達式相關的函數:

grep(pattern, x, ignore.case = FALSE, perl = FALSE, value = FALSE, 
     fixed = FALSE, useBytes = FALSE, invert = FALSE) 
   
grepl(pattern, x, ignore.case = FALSE, perl = FALSE, 
      fixed = FALSE, useBytes = FALSE) 
   
sub(pattern, replacement, x, ignore.case = FALSE, perl = FALSE, 
    fixed = FALSE, useBytes = FALSE) 
   
gsub(pattern, replacement, x, ignore.case = FALSE, perl = FALSE, 
     fixed = FALSE, useBytes = FALSE) 
   
regexpr(pattern, text, ignore.case = FALSE, perl = FALSE, 
        fixed = FALSE, useBytes = FALSE) 
   
gregexpr(pattern, text, ignore.case = FALSE, perl = FALSE, 
         fixed = FALSE, useBytes = FALSE) 
   
regexec(pattern, text, ignore.case = FALSE, perl = FALSE, 
        fixed = FALSE, useBytes = FALSE)  

 

這里是對參數進行一個解釋說明。

 

參數

說明

pattern

正則表達式

x, text

字符向量或字符對象,在R 3.0.0后版本中,最大支持超過2^31個的字符元素。

ignore.case

默認FALSE,表示區分大小寫,TRUE時表示不區分大小寫。

perl

是否使用Perl兼容的正則表達式

value

默認為FALSE,當查找到時返回1,否則返回0;當為TRUE查找到時返回整個x,text,否則返回0。

fixed

如果為TRUE,pattern是要匹配的字符串。覆蓋所有沖突的參數

useBytes

默認為false,當為true時,則是逐字節逐字節匹配而不是逐字符逐字符匹配。

invert

如果TRUE返回不匹配的元素的索引或值。

replacement

如果查找到之后,進行替換,若沒有找到,則返回x,text值

 

函數

作用

grep()

查找,存在參數value,返回結果是匹配項的下標

grepl()

查找,返回值為true

sub()

只對查找到的第一個內容進行替換。(同下)

gsub()

對查找到的所有內容進行替換,返回替換后的text;否則直接返回text

regexpr()

返回一個與給出第一個匹配的起始位置的文本長度相同的整數向量,如果沒有則返回-1, “match.length”給出匹配文本長度的整數向量(或-1)。匹配位置和長度為字符。

除了regexec,目前不支持Perl風格()的正則表達式。

。useBytes的主要效果是避免關於多字節語言環境中的無效輸入和偽匹配的錯誤/警告,但對於regexpr,它會更改輸出的解釋。它禁止具有標記編碼的輸入的轉換,並且如果發現任何輸入被標記為“字節”,則被強制參見編碼)。

無關匹配對多字節語言環境中的字節沒有多大意義,如果useBytes = TRUE,您應該希望它只適用於ASCII字符。

regexpr和gregexpr與perl = TRUE允許Python風格的命名捕獲,但不是長矢量輸入。

當前語言環境中的無效輸入最多警告5次。

對於非ASCII字符,與PERL = TRUE的無符號匹配取決於使用“Unicode屬性支持”編譯的PCRE庫:外部庫可能不是。

如果你正在做很多的正則表達式匹配,包括非常長的字符串,通常將正則表達式引擎設為PCRE,這將將比默認正則表達式引擎快,而fixed = TRUE更快(特別是當每個模式只匹配幾次時)。

 

gregexpr()

返回一個與文本長度相同的列表,每個元素的格式與regexpr的返回值相同,除了給出了每個(不相交)匹配的起始位置。

regexec()

返回與文本相同長度的列表,如果沒有匹配,則返回-1,或者具有匹配的起始位置的整數序列和對應於模式的括號子表達式的所有子串,其中屬性“match .length“給出匹配長度的向量(或沒有匹配的-1)。

 

 

 

正則表達式轉義字符
空白元字符 [\b] 回退(並刪除)一個字符(backspace)
\f 換頁符
\n 換行符
\r 回車符
\t 制表符(tab)
\v 垂直制表符
注:\r\n是windows所用的文本行結束符,Unix和Linux只是用一個換行符來結束一個文本行
匹配數字與非數字 \d 任何一個數字字符,等價於[0-9]
\D 任何一個非數字字符,等價於^[0-9]
匹配字母\非字母與數字 \w 任何一個字母數字字符(大小寫均可以)或下划線字符(等價於[a-zA-Z0-9])
\W 任何一個非字母數字或下划線字符(等價於[^a-zA-Z0-9])
匹配空白字符 \s 任何一個空白字符(等價於[\f\n\r\t\v])
\S 任何一個非空白字符(等價於[^\f\n\r\t\v])
POSIX字符類 [:alnum:] 任何一個字母或數字(等價於[a-ZA-Z0-9])
[:alpha:] 任何一個字母(等價於[a-ZA-Z])
[:blank:] 空格或制表符(等價於[\t ])    注:t后面有一個空格
[:cntrl:] ASCII控制字符(ASCII 0到31,再加上ASCII 127)
[:digit:] 任何一個數字(等價於[0-9])
[:graph:] 和[:print:]一樣,但不包括空格
[:lower:] 任何一個小寫字母(等價於[a-z])
[:print:] 任何一個可打印字符
[:punct:] 既不屬於[:alnum:],也不屬於[:cntrl:]的任何一個字符
[:space:] 任何一個空格字符,包括空格(等價於[f\n\r\t\v ] 注:v后面有一個空格
[:upper:] 任何一個大寫字母(等價於[A-Z])
[:xdigit:] 任何一個十六進制數字(等價於[a-fA-F0-9])
其他 . 可以匹配任何單個的字符字母數字甚至.字符本身。同一個正則表達式允許使用多個.字符。但不能匹配換行
\\ 轉義字符,如果要匹配就要寫成“\\(\\)”
| 表示可選項,即|前后的表達式任選一個
^ 取非匹配
$ 放在句尾,表示一行字符串的結束
() 提取匹配的字符串,(\\s*)表示連續空格的字符串
[] 選擇方括號中的任意一個(如[0-2]和[012]完全等價,[Rr]負責匹配字母R和r)
{} 前面的字符或表達式的重復次數。如{5,12}表示重復的次數不能小於5,不能多於12,否則都不匹配
* 匹配零個或任意多個字符或字符集合,也可以沒有匹配
+ 匹配一個或多個字符,至少匹配一次
? 匹配零個或一個字符


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM