在 R 中拆分逗号和分号分隔的字符串

Splitting a comma- and semicolon-delimited string in R

我正在尝试拆分包含两个条目的字符串,每个条目都有特定的格式:

这是我要拆分的字符串:

string <- "active site: His, Glu,region: nucleotide-binding motif A,"

这是我目前尝试过的方法。除了两个空子字符串,它会产生所需的输出。

unlist(str_extract_all(string, ".*?(?=,(?:\w+|$))"))

[1] "active site: His, Glu"              ""                                   "region: nucleotide-binding motif A"
[4] "" 

如何去掉空子串?

你得到空字符串,因为 .*? 也可以匹配一个空字符串,其中此断言 (?=,(?:\w+|$)) 为真

您可以在匹配 :

之前使用否定字符 class 排除匹配冒号或逗号
[^:,\n]+:.*?(?=,(?:\w|$))

说明

  • [^:,\n]+ 匹配除 : , 或换行符
  • 以外的 1+ 个字符
  • :匹配冒号
  • .*? 尽可能匹配任何字符
  • (?= 正面前瞻,断言当前位置的正右方:
    • ,字面匹配
    • (?:\w|$) 匹配单个单词字符,或断言字符串结尾
  • ) 关闭前瞻

Regex demo | R demo

string <- "active site: His, Glu,region: nucleotide-binding motif A,"
unlist(str_extract_all(string, "[^:,\n]+:.*?(?=,(?:\w|$))"))

输出

[1] "active site: His, Glu"              "region: nucleotide-binding motif A"

比@The fourth bird +1长得多,也不优雅, 但有效:

library(stringr)

string2 <- strsplit(string, "([^,]+,[^,]+),", perl = TRUE)[[1]][2]
string1 <- str_replace(string, string2, "")
string <- str_replace_all(c(string1, string2), '\,$', '')
> string
[1] "active site: His, Glu"             
[2] "region: nucleotide-binding motif A"