我正在尝试使用
在第一个空格后提取单词物种< -gsub(“。*([A-Za-z] +)”,“\ 1”,x =属)
这适用于有两个单词的其他行,但是行[9]“Eulamprus tympanum marnieae”有3个单词而我的代码只返回字符串“marnieae”中的最后一个单词。如何在第一个空格后提取单词,这样我就可以检索“鼓膜”而不是“marnieae”,但将答案存储在一个名为> species的变量中。
属
[9]“Eulamprus tympanum marnieae”
答案 0 :(得分:0)
您的原始模式无法正常工作,因为子模式[A-Za-z]+
与空格不匹配,因此只匹配一个单词。
您可以使用以下模式匹配第一个之后的任意数量的单词(除0之外),在双引号内:
"[A-Za-z]+ ([A-Za-z ]+)"
https://regex101.com/r/p6ET3I/1
https://regex101.com/r/p6ET3I/2
这是一个相对简单但不完美的解决方案。它也会匹配尾随空格,或者在第一个单词后只有一个或多个空格,即使第二个单词不存在也是如此。例如,"Eulamprus "
将成功匹配模式,并返回5个空格。如果您确信数据格式正确,则应该只使用此模式。
更可靠的方法如下:
"[A-Za-z]+ ([A-Za-z]+(?: [A-Za-z]+)*)"
https://regex101.com/r/p6ET3I/3
此模式将捕获一个单词(在第一个单词之后),后跟任意数量的加法单词(包括0),用空格分隔。
然而,从我记得的生物学课程来看,物种只有一两个名字,而且从不资本化。以下模式将反映此格式:
"[A-Za-z]+ ([a-z]+(?: [a-z]+)?)"