在 R 中拆分逗号和分号分隔的字符串
Splitting a comma- and semicolon-delimited string in R
我正在尝试拆分包含两个条目的字符串,每个条目都有特定的格式:
- 类别(例如
active site
/region
)后跟 :
- 字词(例如
His, Glu
/nucleotide-binding motif A
)后跟 ,
这是我要拆分的字符串:
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|$)
匹配单个单词字符,或断言字符串结尾
)
关闭前瞻
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"
我正在尝试拆分包含两个条目的字符串,每个条目都有特定的格式:
- 类别(例如
active site
/region
)后跟:
- 字词(例如
His, Glu
/nucleotide-binding motif A
)后跟,
这是我要拆分的字符串:
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+|$))
为真
您可以在匹配 :
[^:,\n]+:.*?(?=,(?:\w|$))
说明
[^:,\n]+
匹配除:
,
或换行符 以外的 1+ 个字符
:
匹配冒号.*?
尽可能匹配任何字符(?=
正面前瞻,断言当前位置的正右方:,
字面匹配(?:\w|$)
匹配单个单词字符,或断言字符串结尾
)
关闭前瞻
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"