如何解决使用正则表达式重新格式化文本
| 有没有办法使用正则表达式来重新格式化字符串? 我有一个字符串,例如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
,以此类推。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。