gpt4 book ai didi

去除字符串中除 E+ 和 E- 以外的非数字

转载 作者:行者123 更新时间:2023-12-02 06:27:27 24 4
gpt4 key购买 nike

我有一个向量 vec,我想将其转换为数字类型。因此我需要先去掉非数字(包括“+”)。问题:当我排除它们时,“E+”和“E-”符号中的“+”和“-”也被删除。

如何删除除“E-”、“E+”和“.”之外的所有非数字?从 vec?

vec = c('1234', '+ 42', '1E+4', 'NR 12', '4.5E+04', '8.6E-02')

我的方法:

gsub('[^0-9E.]', '', vec) # removes '-' and '+' in 'E-' and 'E+'

gsub('[^0-9(E\\+).]', '', vec) # includes the '+' from '+ 42'

我想要的输出是:

c('1234', '42', '1E+4', '12', '4.5E+04', '8.6E-02')

最佳答案

您可以使用 following regex提取这些数字:

[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?

详情

  • [-+]? - +-
  • [0-9]* - 0+ 位
  • \.? - 一个可选的 .
  • [0-9]+ - 1+ 位
  • ([eE][-+]?[0-9]+)? - 可选的捕获组(在 ( 使用非捕获组)匹配 1 次或 0 次出现
    • [eE] - eE
    • [-+]? - 可选的 -+
    • [0-9]+ - 1 个或多个数字

R demo :

vec <- c('1234', '+ 42', '1E+4', 'NR 12', '4.5E+04', '8.6E-02')
res <- regmatches(vec, regexpr("[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?", vec))
unlist(res)
## => [1] "1234" "42" "1E+4" "12" "4.5E+04" "8.6E-02"

如果期望字符向量中的每个项目有多个匹配项,请将 regexpr 替换为 gregexpr

关于去除字符串中除 E+ 和 E- 以外的非数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53897236/

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