2016-11-14 330 views
0

我要检索的第一个数字(在这里 - > 344002)从一个字符串:R:如何从字符串中提取特定的数字?

string <- '<a href="/Archiv-Suche/!344002&amp;s=&amp;SuchRahmen=Print/" ratiourl-ressource="344002"' 

我最好找一个正则表达式,之后将查找号码!和之前的&放大器。

所有我想出来的是这个,但这抓住了! (!344002):

regmatches(string, gregexpr("\\!([[:digit:]]+)", string, perl =TRUE)) 

任何想法?

+1

'子( '*?(\\ d +)*', '\\ 1',串)' – alistaire

回答

3

使用this regex

(?<=\!)\d+(?=&amp) 

使用此代码:

regmatches(string, gregexpr("(?<=\!)\d+(?=&amp)", string, perl=TRUE)) 
  • (?<=\!)是回顾后,比赛开始之后!
  • \d+一个数字或匹配多个
  • (?=&amp)停止比赛,如果下一个字符是&amp
+1

你需要双倍转义\\ d +,我不认为你需要逃避!在所有'regmatches(string,gregexpr(“(?<=!)\\ d +(?=&amp;”),string,perl = TRUE))''。但+1。 – thelatemail

+0

感谢您的快速帮助! – SimGeh

0
library(gsubfn) 
strapplyc(string, "!(\\d+)")[[1]] 

老答案]

测试此代码。

library(stringr) 
str_extract(string, "[0-9]+") 

类似的问题&答案是在座

Extract a regular expression match in R version 2.10

+0

,这并不保证你得到的数字后, !并在& – rawr

+0

之前是的,你是对的。 – JKim

0

您可能捕获数字( \d+)在!&amp之间并且通过regexec/regmatches得到它:

> string <- '<a href="/Archiv-Suche/!344002&amp;s=&amp;SuchRahmen=Print/" ratiourl-ressource="344002"' 
> pattern = "!(\\d+)&amp;" 
> res <- unlist(regmatches(string,regexec(pattern,string))) 
> res[2] 
[1] "344002" 

online R demo

相关问题