您的位置:首页 > 其它

[每日一答] [20151019] R语言中的正则表达式

2015-10-22 00:07 190 查看
元字符

元字符是指正则表达式中使用一些固定的字符,来代表一定的规则,类似关键字的概念。

常用的元字符

代码
说明

.
匹配除换行符以外的任意字符

\w

匹配字母或数字或下划线或汉字

\s

匹配任意的空白符

\d

匹配数字

^

匹配字符串的开始

$

匹配字符串的结束

QQ="12345678"

notQQ="12345d678"

#注意,在R中,\要换成\\,悲剧的规定,大家淡定地接受就好了

grepl('^\\d{5,12}$',
QQ)

#TRUE

grepl('^\\d{5,12}$',
notQQ)

#FALSE

word="a
g"

grepl('^a\\s*g$',
word)

#TRUE

word="a
d g"

grepl('^a\\s*g$',
word)

#FALSE

grepl('^a.*g$',
word)

字符转义

如果你想查找元字符本身的话,比如你查找.,或者*,就出现了问题:

你没办法指定它们,因为它们会被解释成别的意思。

这时你就得使用\来取消这些字符的特殊意义。

因此,你应该使用\.和\*。当然,要查找\本身,你也得用\\.

word1="I
am a good man."

word2="I
am a good man。"

grepl('.$',
word1)

#TRUE

grepl('.$',
word2)

#TRUE

grepl('\\.$',
word1)

#TRUE

grepl('\\.$',
word2)

#FALSE

重复

你已经看过了前面的*,+,{2},{5,12}这几个匹配重复的方式了。

下面是正则表达式中所有的限定符(指定数量的代码,例如*,{5,12}等):

常用的限定符

代码/语法

说明

*

重复零次或更多次

+

重复一次或更多次

?

重复零次或一次

{n}

重复n次

{n,}

重复n次或更多次

{n,m}
重复n到m次

QQ="12345678"

notQQ="12345d678"

grepl('^\\d{5,12}$',
QQ)

范围

使用[]代表字符的可选项,加上-,代表一个范围,例如[1-9],代表了[123456789],[a-d]代表了[abcd]

QQ="12345678"

notQQ="12345d678"

#注意,在R中,\要换成\\,悲剧的规定,大家淡定地接受就好了

grepl('^[0-9]{5,12}$',
QQ)

grepl('^[0-9]{5,12}$',
notQQ)

反义

常用的反义代码

代码/语法
说明

\W
匹配任意不是字母,数字,下划线,汉字的字符

\S
匹配任意不是空白符的字符

\D
匹配任意非数字的字符

\B
匹配不是单词开头或结束的位置

[^x]

匹配除了x以外的任意字符

[^aeiou]
匹配除了aeiou这几个字母以外的任意字符

word="a
g"

grepl('^a\\S*g$',
word)

#FALSE

word="abcdefg"

grepl('^a\\S*g$',
word)

#TRUE

grepl('^[^a]\\S*g$',
word)

#FALSE,这里要注意[^a]的用法

逻辑
或者|

word=c("ab",
"bc", "cd", "abcd")

grepl('a|b',
word)

#TRUE
TRUE FALSE TRUE



元字符

元字符是指正则表达式中使用一些固定的字符,来代表一定的规则,类似关键字的概念。

常用的元字符

代码
说明

.
匹配除换行符以外的任意字符

\w

匹配字母或数字或下划线或汉字

\s

匹配任意的空白符

\d

匹配数字

^

匹配字符串的开始

$

匹配字符串的结束

QQ="12345678"

notQQ="12345d678"

#注意,在R中,\要换成\\,悲剧的规定,大家淡定地接受就好了

grepl('^\\d{5,12}$',
QQ)

#TRUE

grepl('^\\d{5,12}$',
notQQ)

#FALSE

word="a
g"

grepl('^a\\s*g$',
word)

#TRUE

word="a
d g"

grepl('^a\\s*g$',
word)

#FALSE

grepl('^a.*g$',
word)

字符转义

如果你想查找元字符本身的话,比如你查找.,或者*,就出现了问题:

你没办法指定它们,因为它们会被解释成别的意思。

这时你就得使用\来取消这些字符的特殊意义。

因此,你应该使用\.和\*。当然,要查找\本身,你也得用\\.

word1="I
am a good man."

word2="I
am a good man。"

grepl('.$',
word1)

#TRUE

grepl('.$',
word2)

#TRUE

grepl('\\.$',
word1)

#TRUE

grepl('\\.$',
word2)

#FALSE

重复

你已经看过了前面的*,+,{2},{5,12}这几个匹配重复的方式了。

下面是正则表达式中所有的限定符(指定数量的代码,例如*,{5,12}等):

常用的限定符

代码/语法

说明

*

重复零次或更多次

+

重复一次或更多次

?

重复零次或一次

{n}

重复n次

{n,}

重复n次或更多次

{n,m}
重复n到m次

QQ="12345678"

notQQ="12345d678"

grepl('^\\d{5,12}$',
QQ)

范围

使用[]代表字符的可选项,加上-,代表一个范围,例如[1-9],代表了[123456789],[a-d]代表了[abcd]

QQ="12345678"

notQQ="12345d678"

#注意,在R中,\要换成\\,悲剧的规定,大家淡定地接受就好了

grepl('^[0-9]{5,12}$',
QQ)

grepl('^[0-9]{5,12}$',
notQQ)

反义

常用的反义代码

代码/语法
说明

\W
匹配任意不是字母,数字,下划线,汉字的字符

\S
匹配任意不是空白符的字符

\D
匹配任意非数字的字符

\B
匹配不是单词开头或结束的位置

[^x]

匹配除了x以外的任意字符

[^aeiou]
匹配除了aeiou这几个字母以外的任意字符

word="a
g"

grepl('^a\\S*g$',
word)

#FALSE

word="abcdefg"

grepl('^a\\S*g$',
word)

#TRUE

grepl('^[^a]\\S*g$',
word)

#FALSE,这里要注意[^a]的用法

逻辑
或者|

word=c("ab",
"bc", "cd", "abcd")

grepl('a|b',
word)

#TRUE
TRUE FALSE TRUE

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: