2012-07-05 254 views
0

我不擅長正則表達式,我可以使用一些幫助處理我正在處理的幾個表達式。我有一行文字,例如Text here then 999-99,我希望在最後隔離該數字序列。它可以是999-99999-99-9。以下似乎工作:幫助正則表達式

\d{3}-\d{2}(-\d{1})? 

但我注意到,它真的只是似乎是在文本中的任何位置進行搜索,因爲我可以在數字序列後添加文本,它仍然匹配。這需要更嚴格,以便該行必須以此確切的順序結束,並且沒有任何行後。我嘗試以$而不是?結尾,但似乎從未創建過匹配項(它總是返回假)。

我也可以使用一些字符替換的幫助。我正在研究一個處理OCR掃描的程序,偶爾返回的字符串值包含不可顯示的字符,由܀符號表示。是否有一個正則表達式將用空格替換܀個字符?

+0

的一端與'\ d {3} - \ d {2}( - \ d {1})$'這應該工作 – DonCallisto 2012-07-05 14:36:45

+0

優選你應該問一個單獨的問題用於更換你的問題的一部分,並指出你正在使用哪種語言。 – 2012-07-05 14:42:56

+0

我應該澄清。當使用$而不是?時,它在我使用測試序列999-99-9時有效,但對於999-99不起作用。我需要它爲兩者工作,我認爲它會使用括號。 – tjc59 2012-07-05 14:55:19

回答

3

試試這個正則表達式。

([\d-]+)$ 
1

使用單詞邊界元字符,\b

\b\d{3}-\d{2}(-\d)?\b 

您也可以從最近\d刪除{1},因爲它是多餘的。

+0

如果數字序列後面還有其他文字,這仍然會返回匹配項。它必須是嚴格的,以便字符串必須以這個序列結束,並且在它之後沒有任何結果。 – tjc59 2012-07-05 14:57:41

2

這應該工作。只需用$即可結束您的正則表達式。它代表線路

\d{3}-\d{2}(-\d{1})?$

+0

他特別說過使用'$'不適合他。 – vergenzt 2012-07-05 14:41:46

+0

我應該澄清。當使用$而不是?時,它在我使用測試序列999-99-9時有效,但對於999-99不起作用。我需要它爲兩者工作,我認爲它會使用括號。 – tjc59 2012-07-05 14:55:32