首页 > 解决方案 > 正则表达式中的负前瞻以排除 R 中的百分比 (%)

问题描述

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

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

标签: rregexstringr

解决方案


我们可以通过在模式中字符串的开头和结尾添加^and来解决$

c("123.123%", "123.123") %>% 
      str_extract_all(., "^[0-9]+\\.[0-9]+$")

推荐阅读