楼主: 水舞者
4918 7

[问答] R如何用正则表达式提取字符串 [推广有奖]

  • 0关注
  • 2粉丝

本科生

48%

还不是VIP/贵宾

-

威望
0
论坛币
42 个
通用积分
0
学术水平
0 点
热心指数
1 点
信用等级
2 点
经验
1489 点
帖子
67
精华
0
在线时间
62 小时
注册时间
2015-6-7
最后登录
2021-7-22

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
比如我现在有一个变量a <- "/home/xxxx/xxxx/xxxx/xxxx/name.txt",我现在想用正则表达式匹配name,即将符合/和.之间的name提取出来,请问在R里面怎么写会比较方便一些呢?谢谢!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:正则表达式 如何用 表达式 字符串 如何 表达式 字符串

沙发
飞天玄舞6 发表于 2017-3-31 16:16:06 |只看作者 |坛友微信交流群
如果你的name一样长的话,可以用stringr中的str_sub.如果不一样长的话,可以分两步做,第一步,先取出“/name.txt”,第二步再取出name。
  1. a <- "/home/xxx/xxx/xxxx/name.txt"
  2. pat <- "/.{2,6}\\.txt" #the numbers in {} can be specified by yourself, for example, the maximum length of "name" is "gooood", the shortest length of "name" is "sa", you can specify the pat <- "/.{2,6}\\.txt"
  3. z <- str_extract(a,pat) #first, extract “/name.txt”
  4. str_sub(z,2,-5) #the second step
复制代码

GOOD LUCK!

使用道具

藤椅
johnmy 发表于 2017-3-31 18:39:57 |只看作者 |坛友微信交流群
1.最简单的:
basename(tools::file_path_sans_ext(a))

2.这好象是一个目录中的文件,用
  1. tools::file_path_sans_ext(list.files(tcltk::tk_choose.dir(),pattern = ".txt"))
复制代码


3.不用正则提取,先找到最后一个/的位置,再截取。
  1. b <- str_locate_all(a,"/")[[1]]%>%
  2.    tail(n=1)
  3. str_sub(a,b[1]+1,-5)
复制代码

使用道具

板凳
johnmy 发表于 2017-3-31 18:54:04 |只看作者 |坛友微信交流群
参考:
http://stackoverflow.com/questions/15073753/regex-return-file-name-remove-path-and-file-extension

使用道具

报纸
水舞者 发表于 2017-4-1 14:49:21 |只看作者 |坛友微信交流群
飞天玄舞6 发表于 2017-3-31 16:16
如果你的name一样长的话,可以用stringr中的str_sub.如果不一样长的话,可以分两步做,第一步,先取出“/na ...
谢谢!
因为名字长度是不确定的,所以我后来也是采用你说的第二种办法:
  1. tmp<-strsplit("/xxx/xxx/name","/")[[1]]
  2. GDSname<-strsplit(tail(tmp,1),"\\.")[[1]][1]
复制代码

使用道具

地板
水舞者 发表于 2017-4-1 14:50:36 |只看作者 |坛友微信交流群
johnmy 发表于 2017-3-31 18:54
参考:
http://stackoverflow.com/questions/15073753/regex-return-file-name-remove-path-and-file-exte ...
我之前也想到了提取目录中的文件的名字,但是没有找到办法,谢谢你的答案O(∩_∩)O~

使用道具

7
769139289 发表于 2021-1-13 14:59:24 |只看作者 |坛友微信交流群
str_extract()可以用正则来提取字符串里面的字符

使用道具

8
katymeala 发表于 2021-1-16 09:32:26 |只看作者 |坛友微信交流群
library(stringr)

str_replace(a, '.+\\/(.+).txt', '\\1')
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
admin_kefu + 20 + 1 + 1 + 1 精彩帖子

总评分: 论坛币 + 20  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-28 13:11