使用正则表达式重新格式化文本

| 有没有办法使用正则表达式来重新格式化字符串? 我有一个字符串,例如
AEY4293
,我想在字母和数字之间添加一个破折号,例如
AEY-4293
。 我试图找到类似
s/pattern/replacement/
的东西,但找不到。 我可以使用
/(\\w+)(\\d+)/
来选择块,因此,如果我可以给模式重新格式化像
\\1-\\2
这样的文本,那就太好了。 谢谢!     
已邀请:
        
irb(main):001:0> \"AEY4293\".sub(/(\\D+)(\\d+)/, \'\\1-\\2\')
=> \"AEY-4293\"
    
        
\'AEY4293\'.sub(/(?<=\\w)(?=\\d)/, \'-\')
你也可以
\'AEY4293\'.sub(/(?=\\d)/, \'-\')
接近亩太短的答案。     
        正则表达式将是:
/([A-Z]+)(\\d+)/
替换模式为:
\\1-\\2
表达式
/(\\w+)(\\d+)/
存在问题,因为
\\w
匹配字母和数字。 因此,输入input0ѭ,
\\w+
将匹配
AEY429
\\d+
将匹配尾随
3
。     
        如果非数字前缀始终是三个字符,则可以不使用正则表达式来执行此操作:
s = \'AEY4293\'
s[3,0] = \'-\'
# s is now \'AEY-4293\'
或者,如果您希望在前缀大小上有更多的灵活性,可以结合使用ѭ18with和上面的内容:
s[s.index(/\\d/), 0] = \'-\'
我喜欢它的括号分配符号,因​​为它与您的意图很好地匹配。     
        为此有20种方法。替换为
\\1
,以此类推。     

要回复问题请先登录注册