regex - 在R中拆分没有分隔符的字符串

标签 regex string r split

我在 R 中有一个字符向量,每个元素都包含一个字符串 - 让我们使用这个例子:

my.files <- c("AWCallibration#NoneBino-3", "AWExperiment1#NoneBino-1", "AWExperiment2#NonemonL-2"
)

我想从这些字符串中提取某些信息 -

  1. 首先,两个大写字母字符(在本例中,始终是 "AW")
  2. 试验是用于校准("Callibration")还是数据收集 - 如果是后者,使用了哪种条件("Experiment1" “实验 2”)
  3. 在这个特定的试验中使用了哪个子条件(“Bino”“monL”)
  4. 子条件的重复(“1”“2”)

我首先尝试使用 strsplit,但这似乎只适用于具有常规 分隔符(例如 “_”)的情况。 substring 似乎更适合我的需要,但由于拆分不会发生在常规位置("Experiment1" 有 11 个元素长,“校准” 是十二)。

我怀疑使用正则表达式可能是这里的答案,但我不知道如何解释拆分之间的不同长度。

最佳答案

可以一条一条的提取信息:

first <- substr(my.files, 1, 2)
# [1] "AW" "AW" "AW"

second <- sub("^..(.*)#.*", "\\1", my.files)
# [1] "Callibration" "Experiment1"  "Experiment2" 

third <- sub("^.*#None(.*)-\\d+$", "\\1", my.files)
# [1] "Bino" "Bino" "monL"

fourth <- sub(".*-(\\d+)$", "\\1", my.files)
# [1] "3" "1" "2"

一条命令:

strsplit(my.files, "(?<=^..)(?=[A-Z])|#None|-", perl = TRUE)
# [[1]]
# [1] "AW"           "Callibration" "Bino"         "3"           
# 
# [[2]]
# [1] "AW"          "Experiment1" "Bino"        "1"          
# 
# [[3]]
# [1] "AW"          "Experiment2" "monL"        "2"          

关于regex - 在R中拆分没有分隔符的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20997969/

相关文章:

java - 如何从字符串输入实现 HashMap

java - 替换 Java 中 QueryString 中的参数

r - 如何在 R 中交换列表元素的名称和值?

r - 如何从数据框列表中(有效地)创建箱线图?

javascript - 正则表达式强调匹配的字符串

java - 使用正则表达式删除单词开头或结尾的撇号

regex - Nginx 阻止/拒绝访问多个位置正则表达式

regex - 在 scikit-learn CountVectorizer 中使用 nltk 正则表达式示例

java - Java 中正则表达式的奇怪行为

删除 gtsummary 线性回归表的 p 值列