2013-07-13 181 views
2

基本问题... 我有一个字符串,我试图从下面的字符串中提取数字。从字符串中提取数字

str2="<P>3.1 Design objectives ..... 
<Link>25 
</Link> </P>" 
str2 
a<-strapply(str2,"\\d+",as.numeric,simplify=TRUE) 
a 

这返回3125这是好的。 (这是确定该3.1被分割)

但是,如果字符串没有任何号码都:

pr <- "This is a test string" 
b<-strapply(pr,"\\d+",as.numeric,simplify=TRUE) 

b回报:

[[1]] 
NULL 

如何使用上述检测在字符串中存在一个或多个数字?

is.null(b)返回False它应该。

length(b)给了1,这是NULL对象?

因此,如果length(b)1,那么说这个字符串不包含任何数字是正确的吗?有没有更好的方法来做到这一点?

+0

我认为strapply来自gsubfn包。只是想补充一点,因为我不熟悉它。 –

+0

是的,它来自gsubfn包并且库已经加载。对不起,没有发布那部分。 – BRZ

回答

0

unlist结果和测试其length,例如使用strapplyc

(ll <- as.numeric(unlist(strapplyc(str2,"\\d+",simplify = TRUE)))) 
    numeric(0) 
    length(ll) 
    [1] 0 

编辑重新阅读您的问题,我认为在将正则表达式应用于正则表达式之前,将您的XML结构转换为简单文本会更好/更安全。例如,你可以这样做:

library(XML) 
toString(xmlToList(str2)) 
[1] "3.1 Design objectives ..... \n, 25, \n" 
+0

感谢此工作。 – BRZ

4
require(gsubfn) 
pr <- "This is a test string" 
b<-strapply(pr,"\\d+",as.numeric,simplify=TRUE) 
if(!length(b[[1]])){TRUE} 
#[1] TRUE 

(这是测试列表元素是否为NULL的标准方式)

+2

或'is.null(b [[1]])' – Arun