正则表达式将原始文本转换为数据列

sri*_*amn 4 regex grep r

我有一个程序的原始文本输出,我想转换成一个DataFrame.文本文件未格式化,如下所示.

 10037    149439Special Event       11538.00       13542.59   2004.59
 10070     10071Weekday        8234.00        9244.87   1010.87
 10216     13463Weekend        145.00              0   -145.00
Run Code Online (Sandbox Code Playgroud)

我能够将数据读入R使用readLines()的基本包.如何将其转换为看起来像这样的数据(列名可以是任何东西).

 A        B         C              D              E          F
 10037    149439    Special Event  11538.00       13542.59   2004.59
 10070     10071    Weekday        8234.00         9244.87   1010.87
 10216     13463    Weekend        145.00                0   -145.00
Run Code Online (Sandbox Code Playgroud)

我应该使用什么正则表达式来实现这一目标?我知道,这是理想的应用组合regexec()regmatches().但是我无法想出一个将行分成所需组件的表达式.

Sve*_*ein 5

这是一个简单的解决方案:

raw <- readLines("filename.txt")
data.frame(do.call(rbind, strsplit(raw, " {2,}|(?<=\\d)(?=[A-Z])", perl = TRUE)))

#       X1     X2            X3       X4       X5      X6
# 1  10037 149439 Special Event 11538.00 13542.59 2004.59
# 2  10070  10071       Weekday  8234.00  9244.87 1010.87
# 3  10216  13463       Weekend   145.00        0 -145.00
Run Code Online (Sandbox Code Playgroud)

正则表达式" {2,}|(?<=\\d)(?=[A-Z])"由两部分组成,与"|"(逻辑)结合.

  1. " {2,}"意味着至少两个空格.这将仅在不同的列之间拆分,因为第三列中的文本具有单个空格.
  2. "(?<=\\d)(?=[A-Z])"表示以数字开头,后跟大写字母的位置.这用于在第二列和第三列之间进行拆分.