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帮助文件中的那个对初学者友好。)
答案 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
符号表示从头开始。 a
内gregexpr
匹配破折号,而第二个破折号(^
和-
之间)是表达的方式从A到Z 。由于后一种属性,如果您希望匹配[-A-Z_]
,则必须在A
之后的第一个位置放置Z
。最后,-
匹配下划线,[
符号表示匹配前一个字符类一次或多次。所以-
匹配所有破折号,大写字母或下划线,从头开始一次或多次。
与@ d.b的方法不同,此方法直接提取您想要的内容,而不是删除您不想要的内容。