0

我对编程很陌生,怀疑我需要使用正则表达式来解决我的问题。

1.问题

我有需要去除非字母数字字符的数据——我已经解决了。但我还需要返回元素仅为数字的值。

2. 例子

“NewdataColumn”是我想要返回的。

MyDataColumn, NewdataColumn
12          , 12
2-3         , 23
Aa34        , NA
b-34        , NA

任何帮助,将不胜感激。

编辑 我的部分解决方案是使用stringrgsub功能。例如gsub("[^a-zA-Z0-9]", "", MyDataColumn)。它摆脱了非字母数字字符。剩下的问题是只返回数字元素(如果元素包含 alpha,则返回 NA)。

4

1 回答 1

4

我同意正则表达式是去这里的方式。

首先,初始化列:

NewdataColumn <- rep(NA, length(MyDataColumn))

然后复制不包含字母的条目:

non_alpha <- grep("[[:alpha:]]", MyDataColumn, invert = TRUE)
NewdataColumn[non_alpha] <- MyDataColumn[non_alpha]

最后用空字符串替换非数字字符:

NewdataColumn <- gsub("[^[:alnum:]]", "", NewdataColumn)

正则表达式是一个非常有用的工具。我经常使用regular-expressions.info作为参考,他们也有一些教程可以帮助你入门。幸运的是,这个例子中的正则表达式非常简单,所以它可能是一个很好的早期理解目标。

也就是说,正则表达式非常复杂,只是因为有几种不同的实现并且它们都略有不同。例如,Perl 和 Python 都提供了极大的扩展引擎,但归根结底,每个扩展都有更多的语法需要记住——还有更多你不能编写的正则表达式,因为你会不小心匹配到你不想要的东西匹配。有时很难记住在不同的上下文中什么被认为是“扩展的”,并且扩展并不总是可移植的。

也就是说,我已经持续使用正则表达式大约一年了,而我现在才刚刚开始能够利用简单模式匹配之外的功能。从一些基本示例开始慢慢来。随着您变得更加舒适,您将开始看到更多适用于它们的应用程序,到那时您将准备好了解更多信息。Python 正则表达式是一个特别好的学习工具,因为如果启用“详细”选项,您实际上可以包含注释和未解析的空格。

于 2014-11-17T06:06:10.873 回答