我需要帮助的想法解析这段文字。
我想用最自然的方式来做。
这是经文
text <- "JOHN DEERE: PMWF2126 NEW HOLLAND: 441702A1 HIFI: WE 2126 CUMMINS: 4907485"
我需要这个结果:
| 项目a|b.人口基金|
| - ------|- ------|
| 约翰·迪尔|PMWF2126|
| 新荷兰|小行星441|
| 高频|WE 2126|
| 康明斯|小行星4907485|
这是一个例子,有一个不同的标记一个项目id
我试着:
str_split(text, " ")
[[1]]
[1] "JOHN" "DEERE:" "PMWF2126" "NEW" "HOLLAND:" "441702A1" "HIFI:" "WE" "2126"
[10] "CUMMINS:" "4907485" "CUMMINS:" "3680433" "CUMMINS:" "3680315" "CUMMINS:" "3100310"
谢谢!
2条答案
按热度按时间sz81bmfz1#
该解决方案假设(如示例数据中所示),第二个值始终以数字结尾,而第一列不以数字结尾。如果不是这种情况,则必须修改regex部分
(?<=[0-9] )(?=[A-Z])
,以便拆分点位于两个圆括号部分之间。关键部分是
strsplit(text, "(?<=[0-9] )(?=[A-Z])", perl = TRUE)
部分。此操作将查找在数字值后跟空格?<=[0-9]
之后出现以大写?=[A-Z]
开头的新部分的情况。这些位置将用作拆分点8xiog9wr2#
因为第二个字段总是以数字结尾,而第一个字段不是,所以用数字和换行符替换数字后面的空格,然后使用带有冒号分隔符的
read.table
。给予
如果在你的数据中,第二个字段可以有一个数字,但第一个字段不能,并且数字不一定在字段2的最后一个字的末尾,但可以在字段2的最后一个字的任何地方,那么我们可以使用这个变体,它在这里给出相同的结果。gsubfn与gsub类似,不同之处在于第二个参数可以是函数而不是替换字符串,并且它将捕获组作为输入并替换与函数的输出完全匹配。函数可以用公式符号表示,就像这里所做的那样。