当前位置:  开发笔记 > 编程语言 > 正文

格式化perl正则表达式捕获组

如何解决《格式化perl正则表达式捕获组》经验,为你挑选了1个好方法。

考虑以下情况.这是假设的,但展示了我想要完成的一般事情.

假设我有一个文件,它有一行或多行.在每一行上,它可能有一个或多个[name]=的实例[value],其中[name]是一些变量名称并且[value]是某个值.进一步假设这些中的每一个都匹配/[a-zA-Z]+=[0-9]+/.

我想要的是一个perl表达式,它将打印出每个匹配,以特定方式格式化.我的意图是在命令行上使用它来解析文件中的数据.一个假设的解决方案,因为perl实际上不接受这种语法而变得无效:print m/([a-zA-Z]+)=([0-9]+)/name: \1, value: \2\n/g,当在每一行上运行时,在我们的理想世界中,将打印出每一行的每个匹配,例如name:[name], value:[value]每个格式化的匹配在它自己的行上.

例如,考虑这个输入文件test.txt:

blah blah count=5 blah i=1
books=2 blah
blah fairies=87 water=0

假设我们然后将我们的魔术命令输入bash,如下所示:

perl -n -e 'print m/([a-zA-Z]+)=([0-9]+)/name: \1, value: \2\n/g' test.txt

(对所有返回的匹配要求某种循环可能更合理,但希望你能得到这个想法.)

它将打印以下内容:

name: count, value: 5
name: i, value: 1
name: books, value: 2
name: fairies, value: 87
name: water, value: 0

我意识到这种语法实际上并不起作用,但我想尽可能简单地完成同样的事情.我希望能够偶尔在命令行中使用它来查找和格式化文本.我编写了自己的ruby脚本,但它有点儿麻烦,并没有包含在标准环境中(或者在任何人的环境中,但我自己的).有人知道一些perl的秘密吗?



1> Matt Jacob..:

你非常接近.;-)

$ perl -ne 'print "name: $1, value: $2\n" while /([a-zA-Z]+)=([0-9]+)/g;' test.txt
name: count, value: 5
name: i, value: 1
name: books, value: 2
name: fairies, value: 87
name: water, value: 0

编辑:因为你的评论似乎表明更短是更好,这里是一个削减了几个字符的版本:

$ perl -lne 'print "name: $1, value: $2" while /([A-Z]+)=(\d+)/gi' test.txt

推荐阅读
我我檬檬我我186
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有