2011-04-18 96 views
0

我有一個客戶端給我的CSV文件,我需要將它轉換爲我正在處理的程序的一堆if語句。數據如下所示:正則表達式中的正則表達式

Alfred E. Burr  A.E Burr  A.E Bu  Burr 
A.I Prince  Prince R.V.T.S  Prince Tech 

,我需要將其轉換成:

if(school IS 'Alfred E. Burr' OR school IS 'A.E Burr' OR school IS 'A.E Bu' OR schools IS 'Burr') 
else if(school IS 'A.I Prince' OR school IS 'Prince R.V.T.S' OR school IS 'Prince Tech') 

我已經有代碼編寫的if語句後去。我會手工編碼,但名單上有150所學校。

到目前爲止,我已經建造了一整行匹配這個正則表達式,但我不知道它,我可以用我在它創建於行內的每個學校相匹配的子表達式:

^(([A-Za-z0-9\.\ \&\']+)\t?)+$ 

因此,在這個基礎上工作,我如何編寫正則表達式來匹配每行,然後在這些行中每個學校,甚至有可能?

+0

你使用哪種語言? – Donut 2011-04-18 19:59:15

+0

我正在使用eclipse搜索並實際替換。儘管我的最終代碼將在ColdFusion服務器上運行。 – 2011-04-18 20:08:44

+0

你在做什麼與發現的價值?傳遞給一個函數?保存到數據庫?搗毀它? – 2011-04-18 20:33:22

回答

2

好了,我不會做它在Eclipse中,躲開它。如果你有機會到命令行,這裏是一個Perl的一個班輪,您可以使用:

perl -lanF"\t" -e $'print "else if (" . join(" OR ", map {"school IS \'$_\'"} @F) . ")"' input_file 

爲簡單起見,此命令輸出「否則,如果」對所有線路,包括第一次。您將不得不手動更改第一行。

順便說一句,你說你的輸入數據是一個CSV文件(逗號分隔值),但它看起來實際上是一個製表符分隔的文件。我的解決方案僅適用於製表符分隔的文件作爲輸入。

+0

我很抱歉,它實際上是一個製表符分隔的文件。 – 2011-04-19 14:40:08

0

不確定你在做什麼......你在尋找代碼來爲你建造巨人嗎?如果是這樣,這裏的一些(假)代碼,基於Java:

Pattern p = "([a-z-A-Z\s\.]+)"; // School names - adjust the pattern as neeeded 
String ifBlock; 
for (i = 0; i < data.lineCount; i++)     // Lines in a file 
    String schools = ''; 
    while (p.find())         // School name in a line 
    schools += "school IS " + match + " OR "; 
    end 
    if (school.length > 0) 
    school = school.substring(0, school.length - 3); // trim the trailing 'OR' 
    ifBlock += "else if(" + school + ") { \n <<EXECUTION CODE>> \n }"; // add to block 
end 
if (ifBlock.length > 0) 
    ifBlock = ifBlock.substring(5);      //Remove leading 'else' 
+0

不知道巴特在這裏改變了什麼...無論如何,我要說我更喜歡爲每一行建立一個'Set'的方法,然後使用'if(theSet.contains(theItem))'編輯:nevermind,I現在看。感謝Bart! – 2011-04-18 20:44:56

0

我不知道你想和你的正則表達式做什麼。

我會這樣做,因爲這是一次性工作,搜索替換分三個步驟。我不知道日食能做什麼,但也應該能夠做到這一點。

  1. 步驟:插入在一排「否則,如果(學校「」萬事開頭第一行,用手工做

  2. 步驟:更換‘’(5個空格,如在上面的例子)「‘OR學校’」

  3. 步:如果你可以插入在每一行結束「')」