免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1470 | 回复: 2

split为什么会多出空字段? [复制链接]

论坛徽章:
0
发表于 2012-10-23 23:50 |显示全部楼层
本帖最后由 iLRainyday 于 2012-10-24 00:19 编辑

现在要做一个小东西,用来提取各个选择题的选项部分(不包括选项字母),并将提取出来的选项之间用;隔开。例如:

2  以下可以在PHOTOSHOP中直接打开并编辑的文件格式有(        ABC         ).
A  *.JPG     B  *.GIF       C  *.EPS          D  *.DOC

3  在PHOTOSHOP中,修改图像文件画布尺寸的方法可以是(        D      )
A.  给定选择区然后执行菜单命令<图像>/<裁切>
B)  在PHOTOSHOP工具箱面板中<裁切>工具
C  使用PHOTOSHOP中的菜单<图像>/<图像大小>
(D)  使用PHOTOSHOP中的菜单命令<图像>/<画布大小>

所以写了如下代码(部分)(事先已经将所有的选项提取并存放在@lines了)(正则部分写的很丑):
  1. foreach my $option_line (@lines) {
  2.             push @options, (split /(?:\h+|\x{0028}|\x{FF08}|^)[A-Z]\p{P}*\h+/i, $option_line);                #获取全部备选答案
  3.     }
  4.     foreach (@options) {
  5.         $combin_options .= $_. ';';
  6.     }
复制代码
但是发现@options中总是包含空字段。不知道为什么???

所以只好用了很苦逼的方法:

foreach my $option_line (@lines) {
            push @options, (split /(?:\h+|\x{0028}|\x{FF08}|^)[A-Z]\p{P}*\h+/mi, $option_line);                #获取全部备选答案
        @options = grep {$_} @options;
    }
    foreach (@options) {
        $combin_options .= $_. ';';
    }

论坛徽章:
0
发表于 2012-10-24 11:25 |显示全部楼层
本帖最后由 sjdy521 于 2012-10-24 11:25 编辑

不知道你所谓的出现空白是指哪一部分。如果是因为按照开头的A.分隔,split得到列表第一个为空,那很正常,特殊处理下就行
但是你的正则分隔的有问题,会导致分隔后的数据仍然有空白。
可以试试这个
  1. /(?:^|\h+)\p{P}?[A-Z]\p{P}?\h+/i
复制代码

论坛徽章:
0
发表于 2012-10-24 12:19 |显示全部楼层
本帖最后由 iLRainyday 于 2012-10-24 12:49 编辑

回复 2# sjdy521

我是指在内部也会出现空白字段。和你的代码比对了一下:

这是你的:
  1. /(?:^|\h+)\p{P}?[A-Z]\p{P}?\h+/i
复制代码
这是我的:(现在我也想不起来为什么要用\x{0028}|\x{FF08}来显式的匹配中/英文的括号...好像是题库里有个什么特殊情况...注释写的不详细啊...)
  1. /(?:\h+|\p{P}*|^)[A-Z]\p{P}*\h+/i
复制代码
问题就出来我把\p{P}放在了多选结构的内部,你把\p{P}放在了外部。看来我对多选结构成员的选择有问题啊~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP