gpt4 book ai didi

r - 如何使用正则表达式按顺序提取字符串中包含的数字

转载 作者:行者123 更新时间:2023-12-04 08:35:47 25 4
gpt4 key购买 nike

我有一个如下所示的数据框:

df <- data.frame(col = c("3.2% 1ST $100000 AND 1.1% BALANCE", "3.3% 1ST $100000 AND 1.2% BALANCE AND $3000 BONUS FULL PRICE ONLY", 
"$4000", "3.3% 1ST $100000 AND 1.2% BALANCE", "3.3% 1ST $100000 AND 1.2% BALANCE",
"3.2% 1ST $100000 1.1% BALANCE","2.1% 1ST $100000 AND 1.2% BALANCE PLUS $2500"))

col
1 3.2% 1ST $100000 AND 1.1% BALANCE
2 3.3% 1ST $100000 AND 1.2% BALANCE AND $3000 BONUS FULL PRICE ONLY
3 $4000
4 3.3% 1ST $100000 AND 1.2% BALANCE
5 3.3% 1ST $100000 AND 1.2% BALANCE
6 3.2% 1ST $100000 1.1% BALANCE
7 2.1% 1ST $100000 AND 1.2% BALANCE PLUS $2500
我想要做的是将这些字符串中的数字分开,并将它们放在新数据框中的不同列中。正如@Ronak Shah 在这里推荐的那样: How to find a pattern in a string and extract it as a new column of data frame
我使用了这种方法,效果很好:
library(tidyverse)

a<-df %>%
extract(col, c('First', 'cut-off', 'Second'),
'(\\d+.*?)% 1ST\\s*\\$(\\d+).*?(\\d+.*?)%.*?', remove = FALSE) %>%
mutate(Bonus = str_extract(col, '\\d+(?=\\sBONUS)'))
然而,我刚刚意识到有时出于某种原因, 这个词。奖金评论中没有提到这个数字实际上是一个奖金。例如在这个字符串中 2.1% 1ST $100000 AND 1.2% BALANCE PLUS $2500第四个数字是 BONUS 但后面没有“BONUS”这个词,所以这个数字不能被捕获。
我想知道有没有办法解决这个问题?有没有办法提取字符串的第四个数字?似乎在大多数情况下,这个 BONUS 数字是我的字符串的第四个数字。

最佳答案

您可以使用

^(\d[\d.]*)%\s*1ST\s*\$(\d+)\D*(\d[\d.]*)%\D*(\d*)
regex demo .
在 R 中,使用
a <- df %>%
extract(col, c('First', 'cut-off', 'Second', 'Bonus'),
'^(\\d[\\d.]*)%\\s*1ST\\s*\\$(\\d+)\\D*(\\d[\\d.]*)%\\D*(\\d*)', remove = FALSE)
详情
  • ^ - 字符串开头
  • (\d[\d.]*) - 第 1 组:一个数字,然后是零个或多个数字/点
  • % - 一个 %字符
  • \s* - 0+ 个空格
  • 1ST - 一个字符串
  • \s* - 0+ 个空格
  • \$ - 一个 $字符
  • (\d+) - 第 2 组:一位或多位数字
  • \D* - 0+ 非数字
  • (\d[\d.]*) - 第 3 组:一个数字,然后是零个或多个数字/点
  • %\D* - %和 0+ 非数字
  • (\d*) - 第 4 组:零个或多个数字。
  • 关于r - 如何使用正则表达式按顺序提取字符串中包含的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64810506/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com