是否有R函数提取字符中的数字?

是否有R函数提取字符中的数字?,r,dplyr,R,Dplyr,我有一个像d d <- c("您尾号1234卡11月11日00:03转入人民币1,500.00元,余额人民币1,501.12元", "您尾号3256卡11月11日00:03转出人民币678.12元,余额人民币1,501.12元", "您尾号7894卡11月11日00:03取现0.85元,余额人民币1,501.12元", "您尾号3285卡11月11日00:03支付3.85元,余额

我有一个像
d

d <- c("您尾号1234卡11月11日00:03转入人民币1,500.00元,余额人民币1,501.12元",
       "您尾号3256卡11月11日00:03转出人民币678.12元,余额人民币1,501.12元",
       "您尾号7894卡11月11日00:03取现0.85元,余额人民币1,501.12元",
       "您尾号3285卡11月11日00:03支付3.85元,余额人民币1,501.12元")

d您可以从
stringr
使用
stru extract
功能

正向前瞻
(?=)
查找
符号


负回溯
(?!以下是rebus、readr和stringr/stringi包的两个选项:

library(rebus)
library(readr)
library(stringr)
library(stringi)

pattern <- optional(one_or_more(DGT) %R% ",") %R% optional(one_or_more(DGT) %R% ",") %R% one_or_more(DGT) %R% DOT %R% one_or_more(DGT)

d <- c("您尾号1234卡11月11日00:03转入人民币1,500.00元,余额人民币1,501.12元", "您尾号3256卡11月11日00:03转出人民币678.12元,余额人民币1,501.12元", "您尾号7894卡11月11日00:03取现0.85元,余额人民币1,501.12元", "您尾号3285卡11月11日00:03支付3.85元,余额人民币1,501.12元")

readr::parse_number(stringr::str_extract(d, pattern))

[1] 1500.00  678.12    0.85    3.85

readr::parse_number(unique(unlist(stringi::stri_extract_all_regex(d,pattern))))

[1] 1500.00 1501.12  678.12    0.85    3.85
库(rebus)
图书馆(readr)
图书馆(stringr)
图书馆(stringi)

模式这是一个基本的R解决方案:


txt我添加了210万,再次假设小数是目标

d <- c("您尾号1234卡11月11日00:03转入人民币2,100,500.00元,余额人民币1,501.12元",
       "您尾号3256卡11月11日00:03转出人民币678.12元,余额人民币1,501.12元",
       "您尾号7894卡11月11日00:03取现0.85元,余额人民币1,501.12元",
       "您尾号3285卡11月11日00:03支付3.85元,余额人民币1,501.12元")


str_extract_all(d,"(\\d+,?)*\\.\\d+")

d有一个python库可以解决这个问题

吉恩普 安装 榨取钱财

您将得到以下结果:

['1,500.00元', '1,501.12元']
['678.12元', '1,501.12元']
['0.85元', '1,501.12元']
['3.85元', '1,501.12元']

请在这个github项目中加星号。

我想提取“1500.00”您的答案只提取“500.00”每个字符串中的第二个数值如何,例如第一个字符串中的
1501.12
?您不想提取吗?是的,我也想提取它们
\d{1,3}       a leading 1 to 3 digits
(?:,\\d{3})*  followed by zero or more thousands separator 3 digit groups
\\.\\d{2}     followed by a decimal component with 2 digits of precision
d <- c("您尾号1234卡11月11日00:03转入人民币2,100,500.00元,余额人民币1,501.12元",
       "您尾号3256卡11月11日00:03转出人民币678.12元,余额人民币1,501.12元",
       "您尾号7894卡11月11日00:03取现0.85元,余额人民币1,501.12元",
       "您尾号3285卡11月11日00:03支付3.85元,余额人民币1,501.12元")


str_extract_all(d,"(\\d+,?)*\\.\\d+")
$ git clone https://github.com/dongrixinyu/JioNLP
$ cd ./JioNLP
$ pip install .
import jionlp as jio
text = ["您尾号1234卡11月11日00:03转入人民币1,500.00元,余额人民币1,501.12元",
        "您尾号3256卡11月11日00:03转出人民币678.12元,余额人民币1,501.12元",
        "您尾号7894卡11月11日00:03取现0.85元,余额人民币1,501.12元",
        "您尾号3285卡11月11日00:03支付3.85元,余额人民币1,501.12元"]

for i in text:
    res = jio.extract_money(i)
    print(res)

['1,500.00元', '1,501.12元']
['678.12元', '1,501.12元']
['0.85元', '1,501.12元']
['3.85元', '1,501.12元']