首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在字符图案之间加上逗号?

如何在字符图案之间加上逗号?
EN

Stack Overflow用户
提问于 2018-02-27 03:30:42
回答 3查看 85关注 0票数 0

我使用R来处理一个data.frame;一列有一定的字母和数字的混合,我想在字符模式之间加一个逗号:

输入:

代码语言:javascript
运行
复制
 arr 11p15.5(2097357-2432381)x311p15.4(3424982-4083881)x3 pat.nuc ish11p15.5(RP11-558K10x3
 arr 11p15.5(2097357-2432381)x211p15.4(3224902-4383881)x1 pat
 arr 11p15.5(2097357-2432381)x1 mat13q15.4(3224902-3483881)x1 pat

期望产出:

代码语言:javascript
运行
复制
 arr 11p15.5(2097357-2432381)x3,11p15.4(3424982-4083881)x3 pat.nuc ish11p15.5(RP11-558K10x3
 arr 11p15.5(2097357-2432381)x2,11p15.4(3224902-4383881)x1 pat
 arr 11p15.5(2097357-2432381)x1 mat,13q15.4(3224902-3483881)x1 pat

基本上,我想在第一个(xxx-xxx)x1之后加上一个逗号(这里可以是x1,x2,x3,然后在x1后面有一个"mat","pat“)。

感谢MichaelChirico和Onyambu,我从那个专栏中提取了更多的内容,

输入'arr 11p15.5(2097357-2432381)x311p15.4(3424982-4083881)x3 pat.nuc ish11p15.5(RP11-558K10x3','arr 11p15.5(2097357-2432381)x211p15.4(3224902-4383881)x1 pat','arr 11p15.5(2097357-2432381)x1 mat13q15.4(3224902-3483881)x1 pat','arrhg19 Xp22.33p22.12(60701-21536551)x1~3 x21.31q28(90731177-155208244)x1 ish',‘'arr 11p15.5(2097357-2432381)x3,11p15.4(3424982-4083881)x3 pat.nuc ish11p15.5(RP11-558K10x3)','nuc ish(D21S259/D21S341/D21S342x3).arr(21)x310q26.12(121812494-122486677)x1’‘

输出'arr 11p15.5(2097357-2432381)x3,11p15.4(3424982-4083881)x3 pat.nuc ish11p15.5(RP11-558K10x3','arr 11p15.5(2097357-2432381)x2,11p15.4(3224902-4383881)x1 pat','arr 11p15.5(2097357-2432381)x1 mat,13q15.4(3224902-3483881)x1 pat','arrhg19 Xp22.33p22.12(60701-21536551)x1~3,Xq21.31q28(90731177-155208244)x1 ish',‘'arr 11p15.5(2097357-2432381)x3,11p15.4(3424982-4083881)x3 pat.nuc ish11p15.5(RP11-558K10x3)','nuc ish(D21S259/D21S341/D21S342x3).arr(21)x3,10q26.12(121812494-122486677)x1’‘

我正在尝试下面的代码,但是适用于所有的情况,

X <- c( 'arr 11p15.5(2097357-2432381)x311p15.4(3424982-4083881)x3 pat.nuc ish11p15.5(RP11-558K10x3),'arr 11p15.5(2097357-2432381)x211p15.4(3224902-4383881)x1 pat','arr 11p15.5(2097357-2432381)x1 mat13q15.4(3224902-3483881)x1 pat','arrhg19 Xp22.33p22.12(60701-21536551)x1~3 Xq21.31q28(90731177-155208244)x1 ish',‘'arr 11p15.5(2097357-2432381)x3,11p15.4(3424982-4083881)x3 pat.nuc ish11p15.5(RP11-558K10x3)',nuc ish(D21S259/D21S341/D21S342x3).arr(21)x310q26.12(121812494-122486677)x1’)子(pattern=‘’()x1_2\smat\smat_pat_dn?) ',替换= '\1,‘,x=x)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-02-27 03:49:45

代码语言:javascript
运行
复制
sub("(\\).*?)(\\d{2}[a-z])","\\1,\\2",x)
[1] "arr 11p15.5(2097357-2432381)x3,11p15.4(3424982-4083881)x3 pat.nuc ish11p15.5(RP11-558K10x3"
[2] "arr 11p15.5(2097357-2432381)x2,11p15.4(3224902-4383881)x1 pat"                             
[3] "arr 11p15.52097357-2432381)x1 mat,13q15.4(3224902-3483881)x1 pat"                          
票数 1
EN

Stack Overflow用户

发布于 2018-02-27 03:47:44

你说过

我想在第一个(xxx-xxx)x1后面加上一个逗号

但你的第三个案子与此相矛盾。在澄清替换规则之前,您可以尝试,对于字符串x的向量,

代码语言:javascript
运行
复制
sub('([(][0-9]{7}-[0-9]{7}[)]x[0-9])', '\\1,', x)

探索这里发生了什么

您还可能希望将[0-9]替换为\\d,后者对区域设置稍微更健壮:

代码语言:javascript
运行
复制
sub('([(]\\d{7}-\\d{7}[)]x\\d)', '\\1,', x)

为了在第三次尝试中适应mat,您可以尝试:

代码语言:javascript
运行
复制
sub('([(]\\d{7}-\\d{7}[)]x\\d(\\smat)?)', '\\1,', x)

但这是高度定制的,完全适合你的例子。

票数 0
EN

Stack Overflow用户

发布于 2018-02-27 05:04:02

可以执行以下操作

代码语言:javascript
运行
复制
x <- c(
    'arr 11p15.5(2097357-2432381)x311p15.4(3424982-4083881)x3 pat.nuc ish11p15.5(RP11-558K10x3',
    'arr 11p15.5(2097357-2432381)x211p15.4(3224902-4383881)x1 pat',
    'arr 11p15.5(2097357-2432381)x1 mat13q15.4(3224902-3483881)x1 pat'
)
sub(pattern = "([(][0-9]+-[0-9]+[)]x[0-9])([^[:space:]].*)", replacement = "\\1,\\2", x = x)

以下是一个简短的解释:

1) matchin (xxx-xxx)x1的Regexp是[(][0-9]+-[0-9]+[)]x[0-9],这里我使用[]而不是转义来匹配(。Rest可以读取为数字--任意次数的数字-- [0-9]+-,再加上数字,[0-9]+)x和数字[0-9]

2)利用捕获组对字符串进行分割,然后将非空格字符上的字符串与任意数量的([^[:space:]].*)字符分开,使1中的模式位于第一组中,其余的在第二组中。并将加入,的2组"\\1,\\2"连在一起

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49000653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档