Regex 如何用R中的制表符替换字符串的特定字符

Regex 如何用R中的制表符替换字符串的特定字符,regex,string,r,Regex,String,R,由于每行都有一个数据帧和一个字符串,我需要将第n个字符替换为tab。此外,在第m个字符之前还有很多空格需要转换成tab。 例如,具有以下行: "00001 000 0 John Smith" 我需要将第6个字符(空格)替换为tab,并将John和Smith之间的空格替换为tab。对于所有行,最后一个单词(Smith)从第75个字符开始。所以,基本上我需要将第78个字符之前的所有空格

由于每行都有一个数据帧和一个字符串,我需要将第n个字符替换为tab。此外,在第m个字符之前还有很多空格需要转换成tab。 例如,具有以下行:

"00001 000     0 John                                                      Smith"
我需要将第6个字符(空格)替换为tab,并将John和Smith之间的空格替换为tab。对于所有行,最后一个单词(Smith)从第75个字符开始。所以,基本上我需要将第78个字符之前的所有空格替换为制表符

我需要上面的行,如下所示:

"00001<Tab>000     0 John<Tab>Smith"
“000010000约翰史密斯”

谢谢你的帮助。

如果总是从75开始,这里有一个解决方案。首先是一些样本数据

#sample data
a <- "00001 000     0 John                                                      Smith"
b <- "00001 000     0 John                                                      Smith"

这里有一个解决方案,如果它总是从75开始。首先是一些样本数据

#sample data
a <- "00001 000     0 John                                                      Smith"
b <- "00001 000     0 John                                                      Smith"

您可以在这里使用
gsub

x <- c('00001 000     0 John                                                      Smith',
       '00002 000     1 Josh                                                      Black',
       '00003 000     2 Jane                                                      Smith',
       '00004 000     3 Jeff                                                      Smith')

x <- gsub("(?<=[0-9]{5}) |(?<!\\d) +(?=(?i:[a-z]))", "\t", x, perl=T)
要在输出中实际查看
\t
,请使用
cat(x)


您可以在这里使用
gsub

x <- c('00001 000     0 John                                                      Smith',
       '00002 000     1 Josh                                                      Black',
       '00003 000     2 Jane                                                      Smith',
       '00004 000     3 Jeff                                                      Smith')

x <- gsub("(?<=[0-9]{5}) |(?<!\\d) +(?=(?i:[a-z]))", "\t", x, perl=T)
要在输出中实际查看
\t
,请使用
cat(x)


为了您将来的参考,您可以在SO搜索栏中搜索R-tag问题,如下所示:
[R]替换为tab
@JoshO'Brien实际上,我已经访问了您提到的页面。使用该解决方案,我还将替换一些我不需要的空格(如“John”之前的空格)。@hwnd Yes完全正确。只需打印“df”,我就得到了tab符号,而不是字符串中的tab。此外,对于包含更多单词作为姓氏的行,我还得到了不需要的tab。所以,如果姓氏是“史密斯”,我不希望他们之间有任何标签。@user30314我的错——我应该仔细阅读。我会请其他人重新打开此文件。您的文件是固定宽度格式的吗?也许可以看看
read.fwf
,找到正确的阅读方法。在将来的参考资料中,你可以在SO搜索栏中搜索R-tag问题,如下所示:
[R]替换为tab
@JoshO'Brien实际上,我已经访问了你提到的页面。使用该解决方案,我还将替换一些我不需要的空格(如“John”之前的空格)。@hwnd Yes完全正确。只需打印“df”,我就得到了tab符号,而不是字符串中的tab。此外,对于包含更多单词作为姓氏的行,我还得到了不需要的tab。所以,如果姓氏是“史密斯”,我不希望他们之间有任何标签。@user30314我的错——我应该仔细阅读。我会请其他人重新打开此文件。您的文件是固定宽度格式的吗?也许可以看看
read.fwf
了解正确的阅读方法。出于某些原因,我在“part3”中的姓氏前有多余的空格。@user30314很显然,最后一节不是从75开始的。你的数据中一定隐藏了一些顺序。出于某些原因,我在“part3”中的姓氏前有多余的空格。@user30314好吧,显然最后一部分不是从75开始的。数据中一定隐藏了一些顺序。@user30314您应该知道这取决于最后两列是唯一相邻的一对非数字列。@user30314您应该知道这取决于最后两列是唯一相邻的一对非数字列。
00001   000     0 John  Smith
00002   000     1 Josh  Black 
00003   000     2 Jane  Smith 
00004   000     3 Jeff  Smith