楼主: 中国火箭
8030 8

[有偿编程] R正则表达式——数字提取 [推广有奖]

  • 0关注
  • 0粉丝

本科生

46%

还不是VIP/贵宾

-

威望
0
论坛币
2 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
344 点
帖子
27
精华
0
在线时间
138 小时
注册时间
2005-6-11
最后登录
2018-10-1

楼主
中国火箭 发表于 2017-6-20 12:12:41 |AI写论文
10论坛币



请问怎么限制正则表达式数字提取的位数,比如说只提取六位数

比如 c<-c('啊1234567','12345678','123','123456','啊123456','a123456b','.123456')
我只想提取6位数,超过六位数的不匹配

pattern<-'[^0-9]([0-9]{6})[^0-9]' 会遗漏一些

请教大神有没有什么好的解决方法

关键词:正则表达式 表达式 表达式

沙发
jiangbeilu 学生认证  发表于 2017-6-20 13:14:19
告诉你一种解决问题的思路,你可以把非数字去除掉,然后查看6位数的,就是你要提取的内容了:
  1. x<-c('啊1234567','12345678','123','123456','啊123456','a123456b','.123456')
  2. nchar(gsub("[^0-9]","",x))
复制代码

藤椅
中国火箭 发表于 2017-6-20 14:08:45
jiangbeilu 发表于 2017-6-20 13:14
告诉你一种解决问题的思路,你可以把非数字去除掉,然后查看6位数的,就是你要提取的内容了:
我现在的想法是 pattern<-'([^0-9]|^)([0-9]{6})([^0-9]|$)' ,这样可以把6位数判断正确,但是想提取6位数的话,会带出不需要的信息,比如前文的例子,gregexpr会得到:'啊123456','a123456b','.123456' ,所以提取有一点点问题

想知道R 有没有word boundary这样的正则表达式,可以解决这个问题

板凳
jiangbeilu 学生认证  发表于 2017-6-20 14:22:35
你的这个命令,真的"123456"就无法提取出来了

报纸
中国火箭 发表于 2017-6-20 14:32:46
jiangbeilu 发表于 2017-6-20 14:22
你的这个命令,真的"123456"就无法提取出来了
> c<-c('啊1234567','12345678','123','123456','啊123456','a123456b','.123456')
> pattern<-'([^0-9]|^)([0-9]{6})([^0-9]|$)'
> grep(pattern,c,value=T)
[1] "123456"   "啊123456" "a123456b" ".123456"

是可以的,R 结果如上,  就是把其他字符也一起抓出来了

地板
不懂不装懂 发表于 2017-6-20 14:52:53
  1. library(stringr)
  2. c<-c('啊1234567','12345678','123','123456','啊123456','a123456b','.123456')
  3. dd<-unlist(str_extract_all(c, "[0-9]+"))
  4. dd[nchar(dd)==6]
复制代码

7
Smithereer 学生认证  发表于 2017-6-20 14:56:37
c <- c('啊1234567','12345678','123','123456','啊123456','a123456b','.123456')

8
中国火箭 发表于 2017-6-20 15:17:47
不懂不装懂 发表于 2017-6-20 14:52
不行的,我一句话里面要是“啊啊啊啊1234567啊啊啊啊123456”
我要是只取123456,一开始去掉非数字就不行

9
不懂不装懂 发表于 2017-6-20 15:28:57
不明白你的意思
> c<-c('啊啊啊啊1234567啊啊啊啊123456','啊1234567','12345678','123','123456','啊123456','a123456b','.123456')
> dd<-unlist(str_extract_all(c, "[0-9]+"))
> dd
[1] "1234567"  "123456"   "1234567"  "12345678" "123"      "123456"   "123456"  
[8] "123456"   "123456"  
> dd[nchar(dd)==6]
[1] "123456" "123456" "123456" "123456" "123456"

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-29 04:42