Regex R中n次出现的正则表达式

Regex R中n次出现的正则表达式,regex,r,Regex,R,我正在读取R中的一个文本文件,并希望将每三次出现的“|”替换为“\n”。这是我的代码和输入数据 **Input Data** ====================== 'Monday, November 2, 2015|10:21:27|17:58:12|Tuesday, November 3, 2015|10:13:09|18:52:44|Wednesday, November 4, 2015|10:11:52|18:40:36|Thursday, November 5, 201

我正在读取R中的一个文本文件,并希望将每三次出现的“|”替换为“\n”。这是我的代码和输入数据

**Input Data** 
======================
    'Monday, November 2, 2015|10:21:27|17:58:12|Tuesday, November 3, 2015|10:13:09|18:52:44|Wednesday, November 4, 2015|10:11:52|18:40:36|Thursday, November 5, 2015|10:31:42|18:16:57|Friday, November 6, 2015|10:13:13|--|Saturday, November 7, 2015|--|--|Sunday, November 8, 2015|--|--|Monday, November 9, 2015|--|--|Tuesday, November 10, 2015|10:03:20|18:07:52|Wednesday, November 11, 2015|09:40:20|18:42:20|Thursday, November 12, 2015|10:38:56|18:37:20|Friday, November 13, 2015|10:45:26|18:09:54|Saturday, November 14, 2015|--|--|Sunday, November 15, 2015|--|--|Monday, November 16, 2015|--|--|Tuesday, November 17, 2015|10:11:43|18:36:15|Wednesday, November 18, 2015|--|--|Thursday, November 19, 2015|--|--|Friday, November 20, 2015|12:14:25|20:25:08|Saturday, November 21, 2015|--|--|Sunday, November 22, 2015|--|--|Monday, November 23, 2015|10:08:08|17:57:35|Tuesday, November 24, 2015|14:30:32|--|'

**My R-Code**
====================

    emp <- readChar(FileDir, (file.info(FileDir)$size-172))
    emp <- gsub("\r\n","|",emp)
    empTMP <- gsub('([^|]*|[^|]*|[^|]*)|',"\1\n",emp)


**output**
====================
"\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n|\001\n"

**Required output**
====================
Monday, November 2, 2015|10:21:27|17:58:12
Tuesday, November 3, 2015|10:13:09|18:52:44
Wednesday, November 4, 2015|10:11:52|18:40:36
Thursday, November 5, 2015|10:31:42|18:16:57
Friday, November 6, 2015|10:13:13|--
Saturday, November 7, 2015|--|--
Sunday, November 8, 2015|--|--
Monday, November 9, 2015|--|--
Tuesday, November 10, 2015|10:03:20|18:07:52
Wednesday, November 11, 2015|09:40:20|18:42:20
Thursday, November 12, 2015|10:38:56|18:37:20
Friday, November 13, 2015|10:45:26|18:09:54
Saturday, November 14, 2015|--|--
Sunday, November 15, 2015|--|--
Monday, November 16, 2015|--|--
Tuesday, November 17, 2015|10:11:43|18:36:15
Wednesday, November 18, 2015|--|--
Thursday, November 19, 2015|--|--
Friday, November 20, 2015|12:14:25|20:25:08
Saturday, November 21, 2015|--|--
Sunday, November 22, 2015|--|--
Monday, November 23, 2015|10:08:08|17:57:35
Tuesday, November 24, 2015|14:30:32|--
**输入数据**
======================
2015年11月3日,2015年11月3日,2015年11月3日,2015年11月3日,周四,2015年11月3日,2015年11月3日,2015年11月3日,2015年11月2日,周一周一,2015年11月4日,周一,2015年11月4日,周四,2015年11月5日,2015年11月3日,2015年11月3日,2015年11月4日,周一周一,周一,周四周四,2015年11月4日,2015年11月4月4日,周四周四周四周四周四,2015年11月4日,周四周四,2015年11月4日,周四,周四,2015年11月4日,2015年11月4月4日,周四周四,周四,2015年11月4日,周四,周四,周四,周四,2015年11月4日,周四,2015年11月4日,2015年11月4日,周四,周四,周四,2015年11月4日,周四,周四,周四,周四,周四,周四11月10日,星期二,2015年11月11月11日星期三,2015年11月11月11日,2015年11月11日,2015年11月11月11日星期三,2015年11月12日星期四,2015年11月12日,2015年11月12日周四,2015年11月12日周四,2015年11月12日周四,2015年11月12日,2015年11月12日,2015年11月12日周四,2015年11月12月12日周四,2015年11月12日周四,周四,2015年11月12日,周四,周四,2015年11月12月12日,周四,周四,周四,10 10:10 10 10 10:10 10:10:10:10:10:38:38:38:38:38:56:38:38:38:38:38:38:56 18:38:38:38:38:56 18:38:56 18:18:18:18:18:18:18:18:18:18:38:18:18:18:18:18:18:18 2015年11月18日,星期四,2015年11月19日--2015年11月20日星期五--2015年11月21日星期六--2015年11月22日星期日--2015年11月23日星期一--10:08:08--17:57:35--2015年11月24日星期二--14:30:32--
**我的R代码**
====================
emp以下工作:

#input <- #your input string

x <- strsplit(input, split = "|", fixed = TRUE)[[1L]]

idx <- seq(3L, length(x), by = 3L)
x[idx] <- paste0(x[idx], "\n")
x[-idx] <- paste0(x[-idx], "|")
paste(x, collapse = "")
细分():


(刚刚注意到您最初的尝试非常接近。只是您忘记了正确地转义:
“\\1”
,而不是
“\1”
是保留的,所以我们也必须转义。另外@CAFEBABE是正确的,这似乎更适合
awk

清空我已经编辑了您的答案,如果我的编辑泄露了你的想法,请毫不犹豫地回退。
paste(paste0(x <- strsplit(input, split = "|", fixed = TRUE)[[1L]],
             rep_len(c("|", "|", "\n"), length(x))), collapse = "")
gsub("([^|]*\\|[^|]*\\|[^|]*)\\|", "\\1\n", input)
gsub(paste0("(",        #start capturing group 1
            "[^|]*",    #Matching anything but | 0 or more times
            "\\|",      #Match | (must escape because it's reserved for OR)
            "[^|]*\\|", #again
            "[^|]*",    #again matching anything but |
            ")",        #end captured group
            "\\|"),     #captured group is followed by a third |
     "\\1\n",input)     #replace match with captured group followed by \n
                        #  (instead of |)
 empTMP <- gsub('([^|]*|[^|]*|[^|]*)|',"\1\n",emp)
empTMP <- gsub('([^|]*|[^|]*|[^|]*)|',"\\1\n",emp)