免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1726 | 回复: 7
打印 上一主题 下一主题

模式匹配问题求教 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-01-09 10:11 |只看该作者 |倒序浏览
有一个.csv格式的文件,
每一行的格式如下
字段一,字段二,字段三,.....(字段间用逗号隔开)

如果字段中包含逗号,那么这个字段用双引号包围起来,

字段一,字段二,"字段三(包含逗号)",.....

如果字段中包含成对的引号也包含逗号,格式如下,比如
一个字段内容为 "abc","def"         既包含成对的引号和逗号

最终会是 """abc"",""def""",

所以我的文件实际包含的内容会是
abc,def,""abc"","abc,def"....

我只会用split进行简单的匹配,这个问题让我昨天想了一下午没有答案,

请大家帮我看看

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
2 [报告]
发表于 2006-01-09 10:39 |只看该作者
先用$line =~s/(".*?)(,)(.*?",)/$1,$3/g; 這裡可能要修改....:)
然後$line=~s/""/"/g;
然後再split....

[ 本帖最后由 apile 于 2006-1-9 10:41 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2006-01-09 11:55 |只看该作者
谢谢,有一点不明白,为什么要加个?呢,
.*不是就可以了吗

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
4 [报告]
发表于 2006-01-09 12:21 |只看该作者
nongreed match propose...

论坛徽章:
0
5 [报告]
发表于 2006-01-09 16:21 |只看该作者
谢谢,周杰仑,
不过我还是不懂,perldoc -q split中也给出了方法,
========================================
@new = ();
push(@new, $+) while $text =~ m{
          "([^\"\\]*(?:\\.[^\"\\]*)*)",?
                  | ([^,]+),?
                  | ,
                    }gx;
              push(@new, undef) if substr($text,-1,1) eq ',';
===========================================
我也看不懂,
不过Text:arseWords模块很简单,问题解决了

[ 本帖最后由 droopy 于 2006-1-9 16:23 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2006-01-10 00:10 |只看该作者
========================================
先用$line =~s/(".*?)(,)(.*?",)/$1,$3/g; 這裡可能要修改....
然後$line=~s/""/"/g;
然後再split....

[ 本帖最后由 apile 于 2006-1-9 10:41 编辑 ]
========================================
请问在$line =~s/(".*?)(,)(.*?",)/$1,$3/g语句中后面的‘g’没有‘e’的话可以对$line进行修改吗?

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
7 [报告]
发表于 2006-01-10 10:06 |只看该作者
e是expression的意思...
也就是说/1/2/ge
在2的地方
你可以丢一个subroutine进去...
这边并没有用到subroutine..所以用g就行了..

论坛徽章:
0
8 [报告]
发表于 2006-01-10 11:24 |只看该作者
呵呵,
$万能钥匙=周杰仑朋友;
while ($万能钥匙) {
print "all ok";
}
hehe

[ 本帖最后由 joson12345 于 2006-1-10 11:31 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP