2013-02-19 38 views
4

我有一個樣本輸入文件如下,列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

一個軟件編譯引擎工作作爲機械編譯引擎

我需要找到一個正則表達式來提取描述,並嘗試了很多k inds,但一直未能找到解決方案。有什麼建議麼?

+0

上述輸入文件中的分隔符是「;」 – mahodaya 2013-02-19 05:03:57

+0

我可能已經搞亂了我的編輯,你的意思是在那裏有分號和逗號? – 2013-02-19 05:04:05

+0

好的,請重新編輯。對不起,想想數據庫太多了。 – 2013-02-19 05:04:31

回答

11

你可以使用這個表達式

[^;]+(?=;[^;]*$) 

[^;]匹配任意字符,除了

使用您輸入的perl例如實現示例;

+是匹配前述炭或基團1至多次

*量詞是匹配前述char或組0到多次

$一個量詞的字符串的末尾

(?=pattern)是一個先行檢查特定模式是否發生前面

0

這應該工作

/^[^\s]+\s+[^\s]+\s+[^\s]+\s+(.+)\s+[^\s]+$/m 

或孤獨的牧羊人指出

/^\S+\s+\S+\s+\S+\s+(.+)\s+\S+$/m 

或半冒號

/^[^;]+;[^;]+;+[^;]+;+(.+);+[^;]+$/m 
+1

'\ S'和'[^ \ s]' – 2013-02-19 05:03:05

+0

一樣沒有工作220;約翰; 28;作爲大學教授工作;海得拉巴 – mahodaya 2013-02-19 05:05:07

+0

這幾乎wworks如果你可以使用一個線修飾符),所以^表示行的開始,而$表示結束。在前面的例子中,雖然我只是缺少一列。 '/^[^ \ s] + \ s + [^ \ s] + \ s + [^ \ s] + \ s +(。+)\ s + [^ \ s] + $/m' – Eric 2013-02-19 05:14:53

2

/^(?:[^;]+;){3}([^;]+)/會搶分號之間的第4組。

雖然正如我的評論中所述,你應該只用分號分割字符串並獲取分割的第4個元素......這是分隔文件的全部要點,你不需要複雜的模式匹配。

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' 
+0

我只能在我的編碼中使用正則表達式//,我不能使用上面的編碼 – mahodaya 2013-02-19 05:27:16

+0

我提供的*是*正則表達式。由於您沒有指出您使用的語言,我提供了一個使用正則表達式的示例實現。 – 2013-02-19 05:28:43

+0

我使用aQL語言進行biginsight文本分析 – mahodaya 2013-02-19 05:33:19