使用 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