簡體   English   中英

使用str_replace進行條件替換

[英]Conditional replacing with str_replace

我有這樣的數據:

d = as.character(c("1,23", "1,23.23", "1.23", "-1.2", "1,23.234"))

如果一個字符串有一個標點符號和一個逗號,我想刪除標點符號和標點符號本身后面的字符。

結果應如下所示:

 d = as.character(c("1,23", "1,23", "1.23", "-1.2", "1,23")) 

問題是我不能使用str_replace,因為它也會刪除其他字符串。

library(stringr)

str_replace(d,"\\.[0-9]+", "")
[1] "1,23" "1,23" "1"    "-1"   "1,23"

我們可以匹配一個或多個數字的模式,后跟逗號或點和一個或多個數字,捕獲為一個組( (...) ),在替換中,使用組的反向引用( \\\\1

sub("^(-?\\d+[,.]\\d+).*", "\\1", d)
#[1] "1,23" "1,23" "1.23" "-1.2" "1,23"

或者在str_replace使用相同的模式

library(stringr)
str_replace(d, "^(-?\\d+[,.]\\d+).*", "\\1")
#[1] "1,23" "1,23" "1.23" "-1.2" "1,23"

由於我們的數據似乎有效,因此如果外觀可以使用,則此表達式可能有效:

(?<=,)(.+)(\..+)

在這里,我們只會捕獲那些我猜測不合適的數字。

我們的代碼可能如下所示:

str_replace(d, "(?<=,)(.+)(\..+)", "\\1")

要么

sub("(?<=,)(.+)(\..+)", "\\1", d)

演示

暫無
暫無

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

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