2015-06-04 68 views
3

字符串我有一個多行字符串類似如下:查找後的特定文本號碼與正則表達式

2012-15-08 07:04 Bla bla bla blup 
2012-15-08 07:05 *** Error importing row no. 5: The import of this line failed because bla bla 
2012-15-08 07:05 Another text that I don't want to search... 
2012-15-08 07:06 Another text that I don't want to search... 
2012-15-08 07:06 *** Error importing row no. 5: The import of this line failed because bla bla 
2012-15-08 07:07 Import has finished bla bla 

我想是提取與正則表達式的幫助錯誤的所有行數(使用PowerShell) 。所以我需要找到「***錯誤導入行號」和下面的「:」之間的數字,因爲這總是會給我行號。

我看了其他各種RegEx問題,但說實話,答案就像我的中國人。

試過用http://regexr.com/幫助建正則表達式,但都沒有成功,到目前爲止,例如有以下模式:

"Error importing row no. "(.?)":" 

任何提示?

+0

@AvinashRaj謝謝,但這是行不通的 – Patric

回答

4

試試這個表達式:

"Error importing row no\. (\d+):" 

DEMO

在這裏,你需要了解的量詞和逃脫序列:

  • .任何字符;因爲您只需要數字,請使用\d;如果您的意思是句點字符,則必須使用反斜線(\.
  • ?零個或一個字符;這不是你想要的,因爲在這裏你可以在第10行發現一個錯誤,並且只需要「1」
  • +一個或多個;這就足夠了我們
  • *任何字符數;您必須小心使用.*,因爲它可以消耗您的整個輸入
+0

謝謝,這是在做的伎倆! – Patric

+0

感謝您的額外信息,幫助我更好地瞭解RegEx。 – Patric

1

非常直截了當。現在你的引用會導致你編寫的正則表達式出現錯誤。試試這個:

$LogText = ""#Your logging stuff 
[regex]$Regex = "Error importing row no\. ([0-9]*):" 
$Matches = $Regex.Matches($LogText) 
$Matches | ForEach-Object { 
    $RowNum = $_.Groups[1].Value #(Waves hand) These are the rows you are looking for 
} 
+0

也謝謝你。還在工作,並非常感謝PowerShell示例,幫助我清除了一些問題。 – Patric

0

可以有多種方式,如下圖所示可能會幫助一些簡單的: -

我把你的日誌在一個名爲TEMP.TXT文件。

cat temp.txt | grep " Error importing row no." | awk -F":" '{print $2}' | awk -F"." '{print $2}' 

OR 

cat temp.txt | grep " Error importing row no." | sed 's/\(.*\)no.\(.*\):\(.*\)/\2/' 
相關問題