我正在尝试编辑一个文件,其中有多行这种格式。
ATOM,9,HG,LEU,1,162.4,131.44,219.19,0,0,PROA
ATOM,10,CD1,LEU,1,163.3,130.88,219.73,0,0,PROA
ATOM,11,HD11LEU,1,163.54,130.77,219.97,0,0,PROA,
ATOM,12,HD12LEU,1,163.48,130.98,219.76,0,0,PROA,
字符串
对于第2次和第3次出现逗号(e.g. HG, CD1, HD11LEU etc.)
之间的每个字符串,我想在最后一次出现的数字后面添加一个逗号,前提是字符串中有一个数字,并且数字后面跟着一个字符(e.g. HD12LEU)
。基本上HD12LEU
应该转换为HD12,LEU
。
这就是文件应该看起来的样子。
ATOM,9,HG,LEU,1,162.4,131.44,219.19,0,0,PROA
ATOM,10,CD1,LEU,1,163.3,130.88,219.73,0,0,PROA
ATOM,11,HD11,LEU,1,163.54,130.77,219.97,0,0,PROA,
ATOM,12,HD12,LEU,1,163.48,130.98,219.76,0,0,PROA,
型
我希望一次对文件中的所有行执行此操作。请推荐一种在R/Python/Linux中实现此功能的方法。
2条答案
按热度按时间dm7nw8vv1#
下面是Python中的一个可能的解决方案(regex101 demo):
字符串
印刷品:
型
s3fp2yjn2#
带有
perl=TRUE
的R和带有PyPI正则表达式模块的Python或任何其他使用PCRE或Onigmo正则表达式引擎的语言都支持\K
,这会将字符串中的正则表达式指针重置为当前位置,并丢弃匹配返回的所有先前匹配的字符。如果使用其中一个,则可以用逗号替换以下正则表达式的(零宽度)匹配:字符串
其中标志
g
(“全局”,在第一次匹配后不返回)和m
(“多行”,^
和$
分别匹配行的开头和结尾)设置。Demo
正则表达式可以分解如下。
型
也可以将光标悬停在链接处的表达式的每个部分上以获得其功能的解释。