我有如下示例输入文件,列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 engineer;Chennai它包含30行数据。我的要求是只从上面的文本文件中提取描述。
我的输出应该包含
在大学当教授 他是跨国公司的软件工程师。 作为机械工程师工作
我需要找到一个正则表达式来提取描述,并且尝试了很多种,但是我还没有找到解决方案。我该怎么做呢?
发布于 2013-02-19 05:27:04
您可以使用这个regex:
[^;]+(?=;[^;]*$)[^;]匹配除;以外的任何字符。
+是一个量词,它与前面的字符或组一到多次匹配。
*是一个量词,它与前面的字符或组零多次匹配。
$是字符串的末尾。
(?=pattern)是一种前瞻性,它检查是否预先出现特定的模式。
发布于 2013-02-19 05:13:33
/^(?:[^;]+;){3}([^;]+)/将在分号之间获得第四组。
尽管如我的注释中所述,您应该使用分号拆分字符串,并获取拆分的第四个元素……这就是分隔文件的全部点--您不需要复杂的模式匹配。
使用输入示例在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 engineer at MNC'
'Working as a mechanical engineer'发布于 2013-02-19 05:01:51
这应该是可行的:
/^[^\s]+\s+[^\s]+\s+[^\s]+\s+(.+)\s+[^\s]+$/m或作为 pointed out
/^\S+\s+\S+\s+\S+\s+(.+)\s+\S+$/m或者用分号:
/^[^;]+;[^;]+;+[^;]+;+(.+);+[^;]+$/mhttps://stackoverflow.com/questions/14950082
复制相似问题