不幸的是,我不是正則表達式的專家,所以我需要一點幫助。如何刪除不以特定子字符串開始或結束的字符串?
我正在尋找解決方案如何grep一個字符串數組來獲得兩個字符串的列表不會開始(1)或結束(2)與特定的子字符串。
假設我們有一個匹配以下規則的字符串數組:
[speakerId] - [短語] - [ID] .txt文件
即
10-phraseone-10.txt 11-phraseone-3.txt 1-phraseone-2.txt 2-phraseone-1.txt 3-phraseone-1.txt 4-phraseone-1.txt 5-clauseone-3。 txt 6-phraseone-2.txt 7-phraseone-2.txt 8-phraseone-10.txt 9-phraseone-2.txt 10-phrasetwo-1.txt 11-phrasetwo-1.txt 1-phrasetwo-1.txt 2-phrasetwo-1.txt 3 -twtw-1 .txt 4-phrasetwo-1.txt 5-phrasetwo-1.txt 6-phrasetwo-3.txt 7-phrasetwo-10.txt 8 -twtw-1.txt 9 -twtw-1.txt 10-phrasethree- 10.txt 11-phrasethree-3.txt 1-phrasethree-1.txt 2 -thththree-11.txt 3 -thththree-1.txt 4 -th -three-3.txt 5 -th -three-1.txt 6 -threethree -3.txt 7 phrasethree-1.txt的8 phrasethree-1.txt的9 phrasethree-1.txt的
讓我們介紹變量:
$speakerId
$phrase
$id1
,$id2
我想到grep列表,並獲得的數組:
與含有特定
$phrase
元件,但我們排除那些同時從特定的$speakerId
開始並且結尾H所指明的ID(例如$id1
或$id2
)與具有特定
$speakerId
和$phrase
但不包含特定ID的一個是在結束元素之一(警告:記得不排除10或11$id=1
等等)
也許有人coulde使用下面的代碼寫的解決方案:
@AllEntries = readdir(INPUTDIR);
@Result1 = grep(/blablablahere/, @AllEntries);
@Result2 = grep(/anotherblablabla/, @AllEntries);
closedir(INPUTDIR);
我相信你正在尋找負前瞻('(?!...)'),然後尋找隱藏('(?<!...)')斷言(排除比賽中的特定組件)。 –
這將有助於瞭解您的規則集(包含特定短語,以特定ID開頭,以某個ID結尾)的定義。例如,這些規則是固定的還是需要從文件中讀取? – memowe
夥計們,謝謝你的回覆!我試圖使用負面預測,但沒有成功。我忘了如何使用正則表達式,所以任何例子都會有用。 :)要指定用例:我想僅在部分txt文件上運行測試應用程序。例如,對於有第一個說話者並且由第一個說話者講話但沒有id 1,2或3的文件(id's可以是[1..100]) – venedie