我愿与后跟百分比小数任何(至少一个数字小数点两侧),但不是模式,以提取号码。因此,我认为我需要负超前(因此可以看到,如果数字后跟百分号)。
为了清楚起见,我会想提取"123.123"
,但不希望提取"123.123%"
我已经尝试了十几个语法安排,但无法找到工作的人。这成功地提取了小数模式。
c("123.123%", "123.123") %>% str_extract_all(., "\\d+\\.\\d+")
但我想,以适应它仅返回第二项(因为第一个是包含一个百分比符号。
我曾尝试以下的各种组合:
c("123.123%", "123.123") %>% str_extract_all(., "\\d+\\.\\d+(!?=%)")
c("123.123%", "123.123") %>% str_extract_all(., "\\d+\\.\\d+[!?%]")
c("123.123%", "123.123") %>% str_extract_all(., "\\d+\\.\\d+!?%")
c("123.123%", "123.123") %>% str_extract_all(., "\\d+\\.\\d+!?\\%")
c("123.123%", "123.123") %>% str_extract_all(., "\\d+\\.\\d+(!?=\\%)")
# etc
您可以使用
"\\d+\\.\\d++(?!%)"
所述\d++(?!%)
部分1个或多个数字匹配占有性和所有这些数字都匹配之后被执行一次的(?!%)
负先行并且如果存在后他们%
失败匹配。
同样可以在没有占有欲量词为"\\d+\\.\\d+(?![%\\d])"
,其中(?![%\\d])
也会如果有一个数字立即到当前位置的权失败的比赛被写入。
[R演示:
> library(stringr)
> c("123.123%", "123.123") %>% str_extract_all(., "\\d+\\.\\d++(?!%)")
[[1]]
character(0)
[[2]]
[1] "123.123"
我们现在可以只使用一个终止符,如果没有什么别的可以跟随我们可能会好起来的数量。
c("123.123%", "123.123") %>% str_extract_all(., "\\d+\\.\\d+$")
[[1]]字符(0)
[[2]] [1] "123.123"
我们可以将图案字符串的开头的^
和$
和端固定
c("123.123%", "123.123") %>%
str_extract_all(., "^[0-9]+\\.[0-9]+$")