使用 grep 在字元向量中查詢字串
# General syntax:
# grep(<pattern>, <character vector>)
mystring <- c('The number 5',
'The number 8',
'1 is the loneliest number',
'Company, 3 is',
'Git SSH tag is git@github.com',
'My personal site is www.personal.org',
'path/to/my/file')
grep('5', mystring)
# [1] 1
grep('@', mystring)
# [1] 5
grep('number', mystring)
# [1] 1 2 3
x|y
意味著尋找 x
或 y
grep('5|8', mystring)
# [1] 1 2
grep('com|org', mystring)
# [1] 5 6
.
是 Regex 中的一個特殊字元。這意味著匹配任何角色
grep('The number .', mystring)
# [1] 1 2
嘗試匹配點時要小心!
tricky <- c('www.personal.org', 'My friend is a cyborg')
grep('.org', tricky)
# [1] 1 2
要匹配文字字元,你必須使用反斜槓(\
)轉義字串。但是,R 在建立字串時會嘗試查詢轉義字元,因此你實際上需要轉義反斜槓本身(即你需要雙重轉義正規表示式字元。)
grep('\.org', tricky)
# Error: '\.' is an unrecognized escape in character string starting "'\."
grep('\\.org', tricky)
# [1] 1
如果要匹配多個字元中的一個,可以將這些字元包裝在括號中([]
)
grep('[13]', mystring)
# [1] 3 4
grep('[@/]', mystring)
# [1] 5 7
指示字元序列可能是有用的。例如 [0-4]
將匹配 0,1,2,3 或 4,[A-Z]
將匹配任何大寫字母,[A-z]
將匹配任何大寫或小寫字母,[A-z0-9]
將匹配任何字母或數字(即所有字母數字字元)
grep('[0-4]', mystring)
# [1] 3 4
grep('[A-Z]', mystring)
# [1] 1 2 4 5 6
R 還有幾個可以在括號中使用的快捷方式類。例如,[:lower:]
是 a-z
的縮寫,[:upper:]
是 A-Z
的縮寫,[:alpha:]
是 A-z
,[:digit:]
是 0-9
,[:alnum:]
是 A-z0-9
。請注意,這些整個表示式必須在括號內使用; 例如,要匹配一個數字,你可以使用 [[:digit:]]
(注意雙括號)。另一個例子,[@[:digit:]/]
將匹配字元 @
,/
或 0-9
。
grep('[[:digit:]]', mystring)
# [1] 1 2 3 4
grep('[@[:digit:]/]', mystring)
# [1] 1 2 3 4 5 7
括號也可用於否定與克拉(^
)的匹配。例如,[^5]
將匹配 5
以外的任何字元。
grep('The number [^5]', mystring)
# [1] 2