Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 正则表达式:在开始处捕获数字,并在字符后对数字求反_R_Regex - Fatal编程技术网

R 正则表达式:在开始处捕获数字,并在字符后对数字求反

R 正则表达式:在开始处捕获数字,并在字符后对数字求反,r,regex,R,Regex,我需要捕捉3.93,4.63999…,和-5.35。我尝试过各种变化,但一直无法获得正确的数字集 时间:20:30 3.93 表8.6MG数量:60 4.639999997 -5.35 2000单位标签数量:30 数量 数量:180 第4MG章 x = c("Copay: 20.30", "3.93", "TAB 8.6MG Qty:60", "4.6399999999999997", "-5.35", "2,000UNIT TAB Qty:30", "AMOUNT", "Qty:180", "

我需要捕捉3.93,4.63999…,和-5.35。我尝试过各种变化,但一直无法获得正确的数字集

时间:20:30

3.93

表8.6MG数量:60

4.639999997

-5.35

2000单位标签数量:30

数量

数量:180

第4MG章

x = c("Copay: 20.30", "3.93", "TAB 8.6MG Qty:60", "4.6399999999999997", "-5.35", "2,000UNIT TAB Qty:30", "AMOUNT", "Qty:180", "CAP 4MG");
grep("^[\\-]?\\d+[\\.]?\\d+$", x);
输出(见):

如果允许使用前导/尾随空格,请使用

"^\\s*[\\-]?\\d+[\\.]?\\d+\\s*$"
试试这个

S <- c("Copay: 20.30", "3.93", "TAB 8.6MG Qty:60", "4.6399999999999997", "-5.35", "2,000UNIT TAB Qty:30", "AMOUNT", "Qty:180", "CAP 4MG")

library(stringr)
ans <- str_extract_all(S, "-?[[:digit:]]*(\\.|,)?[[:digit:]]+", simplify=TRUE)
clean <- ans[ans!=""]

所以你需要捕捉只有数字、小数和负号的线条?您到底尝试了什么不起作用?如果您有多行或多行,为什么不执行类似于.numeric(line)的操作,然后删除NAs。我不认为这里需要正则表达式。你能更详细地解释一下,到底是什么使这些数字符合你的比赛条件(还有什么使其他的不合格)?按照你提问的措辞,你可以简单地使用模式
3\.93 | 4\.63999\d*|-5\.35
。显示一个完整的所需输出是一种非常简单的方式来表达你的目标。
S <- c("Copay: 20.30", "3.93", "TAB 8.6MG Qty:60", "4.6399999999999997", "-5.35", "2,000UNIT TAB Qty:30", "AMOUNT", "Qty:180", "CAP 4MG")

library(stringr)
ans <- str_extract_all(S, "-?[[:digit:]]*(\\.|,)?[[:digit:]]+", simplify=TRUE)
clean <- ans[ans!=""]
 [1] "20.30"              "3.93"               "8.6"               
 [4] "4.6399999999999997" "-5.35"              "2,000"             
 [7] "180"                "4"                  "60"                
[10] "30"