加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何用正则表达式捕获科学记数法中的减号?

发布时间:2020-12-14 06:25:50 所属栏目:百科 来源:网络整理
导读:我试图回答一个问题(后来被删除了),我认为这个问题是要求提取科学记数法的文本表示. (使用R的 regex实现,需要对元字符进行双重转义,并且可以用于纯PCRE或Perl模式,我之间的差异我并不真正理解.)我已经解决了大部分任务但仍然似乎无法捕获捕获组中的前导减号.
我试图回答一个问题(后来被删除了),我认为这个问题是要求提取科学记数法的文本表示. (使用R的 regex实现,需要对元字符进行双重转义,并且可以用于纯PCRE或Perl模式,我之间的差异我并不真正理解.)我已经解决了大部分任务但仍然似乎无法捕获捕获组中的前导减号.我似乎唯一能让它成功的方法是使用前导的开括号:
> txt <- c("this is some random text (2.22222222e-200)","other random (3.33333e4)","yet a third(-1.33333e-40)",'and a fourth w/o the "e" (2.22222222-200)')
> sub("^(.+()([-+]{0,1}[0-9][.][0-9]{1,16}[eE]*[-+]*[0-9]{0,3})(.+$)","2",txt)
[1] "2.22222222e-200" "3.33333e4"       "-1.33333e-40"    "2.22222222-200" 

> sub("^(.+()([-+]?[0-9][.][0-9]{1,txt)
[1] "2.22222222e-200" "3.33333e4"       "-1.33333e-40"    "2.22222222-200" 
 #but that seems to be "cheating" ... my failures follow:

> sub("^(.+)([-+]?[0-9][.][0-9]{1,txt)
[1] "2.22222222e-200" "3.33333e4"       "1.33333e-40"     "2.22222222-200" 
> sub("^(.+)(-?[0-9][.][0-9]{1,txt)
[1] "2.22222222e-200" "3.33333e4"       "1.33333e-40"     "2.22222222-200" 
> sub("^(.+)(-*[0-9][.][0-9]{1,txt)
[1] "2.22222222e-200" "3.33333e4"       "1.33333e-40"     "2.22222222-200"

我用“科学记数法正则表达式减去”之类的术语来搜索我的耐心程度

你可以试试
library(stringr)
 unlist(str_extract_all(txt,'-?[0-9.]+e?[-+]?[0-9]*'))
 #[1] "2.22222222e-200" "3.33333e4"       "-1.33333e-40"    "2.22222222-200"

在前导括号后使用基于捕获的方法

str_extract(txt,'(?<=()[^)]*')
 #[1] "2.22222222e-200" "3.33333e4"       "-1.33333e-40"    "2.22222222-200"

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读