2012-12-17 55 views
9

我想從某些文本中抓取數據並將其轉儲到數組中。請看下面的文本作爲示例數據:正則表達式 - 匹配某些字符後的文本

| Example Data 
| Title: This is a sample title 
| Content: This is sample content 
| Date: 12/21/2012 

我目前使用下面的正則表達式來湊這是「冒號」字符後指定的數據:

/((?=:).+)/ 

不幸的是這個表達式也抓住結腸和冒號後的空間。我怎麼只抓住數據?

此外,我不知道如果我這樣做正確..但它看起來好像外面的parens導致匹配返回一個數組。這是父親的功能嗎?

編輯:我使用Rubular來測試我的正則表達式表達

回答

15

你可以將其更改爲:

/: (.+)/ 

搶組1.回顧後的內容也工作,雖然和做你問正是:

/(?<=:).+/ 
2

除了@ MiniTech移動的答案,你也可以做一個3變化:

/(?<=: ?)(.+)/ 

這裏的區別在於,您使用後臺創建/抓取組。

如果你仍然喜歡先行而不是後顧的概念。 。 。

/(?=: ?(.+))/ 

這將圍繞您現有的正則表達式分組,以便在組內捕獲它。

是的,在你的代碼的外括號將作出匹配。將後一個示例與前面的示例進行比較,因爲大多數正則表達式引擎中的第一個結果會返回整個匹配的字符串,因此整個預測將進行「分組」,而不是不必要地使用/(...)/而不使用/(?= ...)/

+0

感謝您的解釋 - 看起來像第一個正則表達式雖然有一個錯誤(無效的模式在後面)。無論如何,我似乎必須在分組/旁觀方面做更多的學習。 –

+0

不允許變長lookbehinds,所以'/(?<=:?)(。+)/'不起作用。 – Ryan

0

我知道你在問正則表達式,但我剛剛看到了正則表達式的解決方案,發現對於那些不熟悉正則表達式的人來說這是很難讀的。

我還使用Ruby和我決定做它:

line_as_string.split(": ")[-1] 

這確實您需要什麼,恕我直言,這是更具可讀性。 對於很長的字符串,它可能效率低下。但不是爲了這個目的。