r - 正则表达式中的负向前瞻以排除 R 中的百分比 (%)

标签 r regex stringr

我希望提取带有任意小数的数字(小数点两边至少各有一个数字),但后面跟着百分比的模式。因此,我相信我需要一个负前瞻(这样它就可以看到数字后面是否有百分号)。

为了清楚起见,我想要提取“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"

关于r - 正则表达式中的负向前瞻以排除 R 中的百分比 (%),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54552393/

相关文章:

r - ggplot图例键颜色和透明度

python替换尖括号(<>)之间的内容

Ruby 无法识别正则表达式的 g 标志

r - ObserveEvent 中 Shiny 的应用程序错误? [.default : invalid subscript type 'list' 中的错误

r - 计算加 1 和负 1 的简单函数

重新排序字符列值以进行绘图

r - 在lapply中删除(替代(x))?

javascript - 如何使用 JavaScript 正则表达式提取最后一个子字符串?

regex - 用不同的替换顺序替换字符串中匹配单个模式的多个位置

r - 在一行中按字数对字符串向量进行子集化