我有一个示例输入文件,如下所示,列ID,名称,开始日期,结束日期,年龄,描述,位置
220;John;23/11/2008;22/12/2008;28;Working as a Professor in University;Hyderabad
221;Paul;30;23/11/2008;22/12/2008;He is a Software engineer at MNC;Bangalore
222;Emma;23/11/2008;22/12/200825;Working as a mechanical enginner;Chennai
它包含30行数据。我的要求是只从上面的文本文件中提取描述。
我的输出应包含
在大学担任教授
他是MNC的软件工程师
作为机械工程师工作
我需要找到一个正则表达式来提取描述,并尝试了很多但却找不到解决方案。有什么建议吗?
答案 0 :(得分:17)
您可以使用此正则表达式
[^;]+(?=;[^;]*$)
[^;]
匹配除;
+
是一个量词,它匹配前面的char或group 1多次
*
是一个量词,它匹配前面的char或0到很多次
$
是字符串
(?=pattern)
是一个前瞻,用于检查特定模式是否在前方发生
答案 1 :(得分:4)
/^(?:[^;]+;){3}([^;]+)/
将获得分号之间的第4组。
虽然如我的评论中所述,你应该用分号分割字符串并抓住分割的第4个元素...这是分隔文件的整个点,你不需要复杂的模式匹配。
使用输入示例在perl中实现的示例:
open(my $IN, "<input.txt") or die $!;
while(<$IN>){
(my $desc) = $_ =~ /^(?:[^;]+;){3}([^;]+)/;
print "'$desc'\n";
}
close $IN;
的产率:
'Working as a Professor in University'
'He is a Software enginner at MNC'
'Working as a mechanical enginner'
答案 2 :(得分:0)
这应该有效
/^[^\s]+\s+[^\s]+\s+[^\s]+\s+(.+)\s+[^\s]+$/m
或孤独的牧羊人指出
/^\S+\s+\S+\s+\S+\s+(.+)\s+\S+$/m
或半冒号
/^[^;]+;[^;]+;+[^;]+;+(.+);+[^;]+$/m
答案 3 :(得分:0)