簡體   English   中英

gsub R從字符串中提取數字

[英]gsub R extract numeric from string

我有這個輸入字符: ($3.24)我想得到3.24我嘗試過:

test <- c("($3.24)")
aa <- gsub("[0-9]+\\.?[0-9]+", '\\1', test)

\\\\1的替代品是什么?

表達式\\\\1表示正則表達式的第一個捕獲組中的內容。 捕獲組由閉包(括號)定義,但由於未定義任何有意義的內容,因此無法獲得所需的結果。

這是gsub()正確使用以獲取所需內容的方法:

> gsub("\\(\\$([0-9]+\\.+[0-9]+)\\)", "\\1", "($3.24)")
[1] "3.24"

這里使用的正則表達式是:

\(\$([0-9]+\.+[0-9]+)\)

捕獲組([0-9]+\\.+[0-9]+) ,它是介於($和右括號之間) ,該數字可能包含一個小數點。 然后使用gsub()test替換為捕獲的內容,在本例中為3.24

您可以在此處探索此正則表達式:

Regex101

您可以借助tidyr軟件包中的extract_numeric函數來tidyr

library(tidyr)
test <- c("($3.24)")
extract_numeric(test)
[1] 3.24

查看extract_numeric的代碼,可以發現它是gsub的簡單包裝。

function (x) 
{
    as.numeric(gsub("[^0-9.-]+", "", as.character(x)))
}

因此,對於當前示例,您可以使用正則表達式

gsub("[^0-9.-]+", "", test)
library(stringr)
str_extract(test, '\\d.\\d+')
#[1] "3.24"

簡單的一個

gsub("\\$", "", test)

如果您只關心數字,則可以使用

gsub("\\$(\\d+(?:\\.\\d+)?)", "\\1", test)

如果您還想刪除() ,請使用

gsub("\\(\\$(\\d+(?:\\.\\d+)?)\\)", "\\1", test)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM