如何使用正则表达式仅匹配字母字符?

时间:2016-03-01 04:34:25

标签: r

我想gsub一个只包含字符和空格的字符串,例如字符串"to delete"。我试过这个:

gsub('[^[:alpha:]$]',NA, "to delete", ignore.case=T)

但是当字符串包含数字时,我也会获得NA,例如:

gsub('[^[:alpha:]$]',NA, "to 1 delete", ignore.case=T)

任何人都可以告诉我我做错了什么?感谢。

1 个答案:

答案 0 :(得分:0)

您的正则表达式仅测试单个非锚定括号表达式。这意味着任何与支架表达式匹配的任何字符的字符串都将匹配正则表达式。

您的括号表达式测试“not alphabetic not dollar”。这匹配很多东西,包括空格,数字和除美元之外的所有标点字符。

听起来您只想匹配仅包含字母和空格字符的整个 的字符串。为此,您需要一个锚定的乘法括号表达式。

此外,您不需要gsub();你只需要sub(),因为只能匹配整个输入字符串的正则表达式在输入字符串中不能多次匹配。

此外,您不需要ignore.case=T,因为[:alpha:]字符类已匹配所有字母,无论字母大小写。

regex <- '^[[:alpha:][:space:]]*$';
sub(regex,NA,'to delete');
## [1] NA
sub(regex,NA,'to 1 delete');
## [1] "to 1 delete"