Regex 如何用R中的制表符替换字符串的特定字符
由于每行都有一个数据帧和一个字符串,我需要将第n个字符替换为tab。此外,在第m个字符之前还有很多空格需要转换成tab。 例如,具有以下行: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个字符之前的所有空格
"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