当位置随机时,从 R 中的自由文本字符变量中提取特定文本

Subset specific text from a free-text character variable in R when the position is random

我有一个数据框,看起来有点像

uniqueID <- sample(1:10, 3, replace=F)
faultDetails <- c("fault is blah blah blah and serial is F1AB3CDE123", "Serial No: f1ds6hrc813, fault is blah blah blah", "fault: blah blah blah serial number: F2GE8FDW159")
myData <- cbind.data.frame(uniqueID, faultDetails)

我需要从每个条目中提取序列号并存储在一个新变量中,但是字段中的位置不固定。唯一不变的是序列号的格式为 F,数字,字母,字母,数字,字母,字母,字母,数字,数字,数字。此外,文本的大小写会随着条目的不同而变化(哦,自由文本的乐趣!)。

我想将此作为我的 dplyr 管道的一部分。感谢任何帮助。

大小写与正确的正则表达式无关。我会这样处理:

library(dplyr)
library(stringr)

uniqueID <- sample(1:10, 3, replace=F)
faultDetails <- c("fault is blah blah blah and serial is F1AB3CDE123", "Serial No: f1ds6hrc813, fault is blah blah blah", "fault: blah blah blah serial number: F2GE8FDW159")
myData <- cbind.data.frame(uniqueID, faultDetails) %>%
  mutate(serial_number = str_extract(faultDetails,
                                     "(F|f)\d{1}\w{2}\d{1}\w{3}\d{3}"))

myData

  uniqueID                                      faultDetails serial_number
1        7 fault is blah blah blah and serial is F1AB3CDE123   F1AB3CDE123
2        9   Serial No: f1ds6hrc813, fault is blah blah blah   f1ds6hrc813
3        3  fault: blah blah blah serial number: F2GE8FDW159   F2GE8FDW159

\w 元字符查找 "word characters";在这里它用于查找字母(尽管它也会检测下划线)。 \w{2} 符号表示我想要两个这样的字符的序列。 \d 元字符查找数字,大括号中的数字是要查找的序列长度。

正则表达式以 (F|f) 开头意味着它可以以 Ff 开头。