在R中我需要一些关于模式匹配的帮助 . 我需要从一个长字符串中提取一个以公共前缀开头的整个单词 . 我想要提取的单词始终以相同的前缀(AA)开头,但单词的长度不同,并且不会出现在字符串的相同位置 .
mytext1 <- as.character("HORSE MONKEY LIZARD AA12345 SWORDFISH") # Return AA12345
mytext2 <- as.character("ELEPHANT AA100 KOALA POLAR.BEAR") # Want to return AA100
mytext3 <- as.character("CROCODILE DRAGON.FLY ANTELOPE") # Want to return NA
作为这个的扩展,如果有两个不同的模式匹配,我想要返回两个字符串怎么办?
mytext4 <- as.character("TULIP AA999 DAISY BB123")
# Pattern matching to AA and BB
# Want to return AA999 BB123
任何有关这方面的帮助将非常感谢:)
2 回答
这是一种
stringr
方法 . 正则表达式匹配AA
前面有空格或字符串(?<=^| )
的开头,然后匹配尽可能少的字符.*?
直到下一个空格或字符串(?=$| )
的结尾 . 请注意,您可以将所有字符串组合到一个向量中,并返回一个向量 . 如果你想要每个字符串的所有匹配项,那么使用str_extract_all
而不是str_extract
,你会得到一个包含每个字符串向量的列表 . 如果要指定多个匹配项,请使用选项和捕获组(AA|BB)
,如图所示 .由reprex package(v0.2.0)于2018-04-29创建 .
您可以使用
sub
获得基本R解决方案