【问题标题】:Using Gsub to get matched strings in R - regular expression使用 Gsub 在 R 中获取匹配的字符串 - 正则表达式
【发布时间】:2017-12-06 02:25:08
【问题描述】:

我正在尝试使用

在第一个空格之后提取单词

物种

这适用于其他有两个单词的行,但是第 [9] 行“Eulamprus tympanum marnieae”有 3 个单词,我的代码只返回字符串“marnieae”中的最后一个单词。如何在第一个空格之后提取单词,以便我可以检索“tympanum marnieae”而不是“marnieae”,但将答案存储在一个名为 >species 的变量中。

[9] “Eulamprus tympanum marnieae”

【问题讨论】:

  • 请发表您的意见,以便我们确定我们提供了正确的答案。
  • genusnew
  • species
  • 这不是你的输入;那是您的代码,它已经包含在原始问题中。请显示您正在处理的实际文本,或至少其中的一部分。您提供的只是一个未正确匹配的行的示例,但在上下文中查看整个内容会更有用。
  • >属 [1] "Bellatorias obiri" "Caretta caretta" [3] "Cyclodomorphus praealtus" "Dermochelys coriacea" [5] "Egernia stokesii badia" "Elseya lavarackorum" [7] "Elusor macrurus " "Eulamprus leuraensis" [9] "Eulamprus tympanum marnieae" "Lepidochelys olivacea" [11] "Lerista allanae" "Liopholis guthega" [13] "Liopholis slateri slateri" "Lucasium occultum" [15] "Tiliqua adelaidensis" "Tympanocryptis pinguicolla "

标签: regex gsub


【解决方案1】:

您的原始模式不起作用,因为子模式 [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]+)?)"

https://regex101.com/r/p6ET3I/4

【讨论】:

  • 非常感谢,这是一个非常详细的答案,我发现这很有帮助:-)
猜你喜欢
  • 1970-01-01
  • 2015-11-30
  • 1970-01-01
  • 2013-06-12
  • 2022-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多