在数字字符后截断字符串

时间:2017-03-01 22:16:42

标签: r regex string

a = c("AZ_UA-20170127012114_001.hl7", "AZ_UA-20170127012050_001.hl7",        
"AZ_YRMC_20170127_06_001.hl7")     

如何编写正则表达式以获得预期的输出如下:

c("AZ_UA-", "AZ_UA-",  "AZ_YRMC_")

我确实知道gsub函数,但总是卡在正则表达式中。如果有正则表达式的详细描述,那将会有所帮助(我不认为R帮助文件中的那个对初学者友好。)

1 个答案:

答案 0 :(得分:1)

以下是redBeard :: Pirate redBeard = blackbeard {head = RedBeard, rightArm = Hook} + regmatches方法:

gregexpr

a = c("AZ_UA-20170127012114_001.hl7", "AZ_UA-20170127012050_001.hl7", "AZ_YRMC_20170127_06_001.hl7") unlist(regmatches(a, gregexpr("^[-A-Z_]+", a))) # [1] "AZ_UA-" "AZ_UA-" "AZ_YRMC_" 提供了匹配的开始和结束位置列表,而gregexpr使用{{1}的输出从<{1}}中仅提取匹配的文本 }}

正则表达式中的regmatches符号表示从头开始agregexpr匹配破折号,而第二个破折号(^-之间)是表达的方式从A到Z 。由于后一种属性,如果您希望匹配[-A-Z_],则必须在A之后的第一个位置放置Z。最后,-匹配下划线[符号表示匹配前一个字符类一次或多次。所以-匹配所有破折号,大写字母或下划线,从头开始一次或多次。

与@ d.b的方法不同,此方法直接提取您想要的内容,而不是删除您不想要的内容。