首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用regex提取由分隔符分隔的部分文本。

使用regex提取由分隔符分隔的部分文本。
EN

Stack Overflow用户
提问于 2013-02-19 04:53:17
回答 4查看 65.1K关注 0票数 11

我有如下示例输入文件,列Id、名称、开始日期、结束日期、年龄、描述和位置:

代码语言:javascript
复制
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行数据。我的要求是只从上面的文本文件中提取描述。

我的输出应该包含

在大学当教授 他是跨国公司的软件工程师。 作为机械工程师工作

我需要找到一个正则表达式来提取描述,并且尝试了很多种,但是我还没有找到解决方案。我该怎么做呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-02-19 05:27:04

您可以使用这个regex:

代码语言:javascript
复制
[^;]+(?=;[^;]*$)

[^;]匹配除;以外的任何字符。

+是一个量词,它与前面的字符或组一到多次匹配。

*是一个量词,它与前面的字符或组零多次匹配。

$是字符串的末尾。

(?=pattern)是一种前瞻性,它检查是否预先出现特定的模式。

票数 23
EN

Stack Overflow用户

发布于 2013-02-19 05:13:33

/^(?:[^;]+;){3}([^;]+)/将在分号之间获得第四组。

尽管如我的注释中所述,您应该使用分号拆分字符串,并获取拆分的第四个元素……这就是分隔文件的全部点--您不需要复杂的模式匹配。

使用输入示例在Perl中实现示例:

代码语言:javascript
复制
open(my $IN, "<input.txt") or die $!;

while(<$IN>){
    (my $desc) = $_ =~ /^(?:[^;]+;){3}([^;]+)/;
    print "'$desc'\n";
}
close $IN;

产量:

代码语言:javascript
复制
'Working as a professor in University'
'He is a software engineer at MNC'
'Working as a mechanical engineer'
票数 5
EN

Stack Overflow用户

发布于 2013-02-19 05:01:51

这应该是可行的:

代码语言:javascript
复制
/^[^\s]+\s+[^\s]+\s+[^\s]+\s+(.+)\s+[^\s]+$/m

或作为 pointed out

代码语言:javascript
复制
/^\S+\s+\S+\s+\S+\s+(.+)\s+\S+$/m

或者用分号:

代码语言:javascript
复制
/^[^;]+;[^;]+;+[^;]+;+(.+);+[^;]+$/m
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14950082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档