记录:
WAP_GATEWAY_ID=XZ-WAPGW BEARER_TYPE=2 USER_MSISDN=+8618091019685 Pesu_ID= SP_Name= UserType= IMEI=
WAP_GATEWAY_ID=XZ-WAPGW BEARER_TYPE=2 USER_MSISDN=+8618091019686 SP_Name= UserType= IMEI=
现在,我想要的是
第一条记录:XZ-WAPGW,2+8618091019685, , , ,
第二条记录(第二条记录中没有Pesu_ID= 这个内容但是我想取的是如果没有这个内容,
我就将它自动补一个空格XZ-WAPGW,2+8618091019685, , , ,
像这种正则表达式如何写呢?我才开始学习。请各位指导一下。谢谢1
4 个解决方案
#1
while (<DATA>) {
if (/WAP_GATEWAY_ID=(\S+)\s+BEARER_TYPE=(\d+)\s+USER_MSISDN=(\+\d+)\s+(?:Pesu_ID=(\S*?)\s+)?SP_Name=(\S*?)\s+UserType=(\S*?)\s+IMEI=(\S*?)/i) {
print "$1, $2$3, $4, $5, $6, $7\n";
}
}
__DATA__
WAP_GATEWAY_ID=XZ-WAPGW BEARER_TYPE=2 USER_MSISDN=+8618091019685 Pesu_ID= SP_Name= UserType= IMEI=
WAP_GATEWAY_ID=XZ-WAPGW BEARER_TYPE=2 USER_MSISDN=+8618091019686 SP_Name= UserType= IMEI=
#2
这个方法是正确的,谢谢您,但是还有个问题,如果一个文件记录多了之后,好像生成的记录会少一些,1到几十条不等,不知道啥原因。
#3
清理下缓存buffer.
#4
牛人写的代码就是牛。
#1
while (<DATA>) {
if (/WAP_GATEWAY_ID=(\S+)\s+BEARER_TYPE=(\d+)\s+USER_MSISDN=(\+\d+)\s+(?:Pesu_ID=(\S*?)\s+)?SP_Name=(\S*?)\s+UserType=(\S*?)\s+IMEI=(\S*?)/i) {
print "$1, $2$3, $4, $5, $6, $7\n";
}
}
__DATA__
WAP_GATEWAY_ID=XZ-WAPGW BEARER_TYPE=2 USER_MSISDN=+8618091019685 Pesu_ID= SP_Name= UserType= IMEI=
WAP_GATEWAY_ID=XZ-WAPGW BEARER_TYPE=2 USER_MSISDN=+8618091019686 SP_Name= UserType= IMEI=
#2
这个方法是正确的,谢谢您,但是还有个问题,如果一个文件记录多了之后,好像生成的记录会少一些,1到几十条不等,不知道啥原因。
#3
清理下缓存buffer.
#4
牛人写的代码就是牛。