2013-07-13 5 views
2

Основной вопрос ... У меня есть строка, и я пытаюсь извлечь числа из строки, используя нижеследующее.Извлечение чисел из строки

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

Это возвращает 3, 1 и 25 это хорошо. (Это нормально, что 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) is 1? Есть ли более элегантный способ сделать это?

+0

Я думаю, что планка из пакета gsubfn. Просто хотел добавить это, потому что я не был знаком с этим. –

+0

Да, его загрузка из пакета gsubfn и библиотеки была загружена. Извините, не отправил эту часть. – BRZ

ответ

0

Я бы unlist результат и проверить его length, например с помощью strapplyc:

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

EDIT Перечитывая ваш вопрос, я считаю, что лучше/безопаснее преобразовать структуру 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

Смежные вопросы