2012-07-06 86 views
0

這是previous question的後續操作。我有一個字符串「測試999-99-9」,除了最後的-9部分之外,我會如何匹配?請記住,最後的-9可能會或可能不會在那裏,但如果是這樣,我想忽略它並匹配其餘的字符串。有什麼建議麼?正則表達式 - 排除部分字符串

或者,如果它忽略了整個999-99-9或999-99部分,只是返回了「測試」部分,那也可以。這似乎可能更容易做到。我基本上想要採取以下表達式並將其反轉以返回字符串的另一半:(\ d {3} - \ d {2} | \ d {3} - \ d {2} - \ d {1} )$

+0

哪種語言? – kapa 2012-07-06 13:43:57

+0

請張貼一些可能的輸入和相應的所需輸出 – heltonbiker 2012-07-06 13:44:10

+0

好吧,就像我上面解釋的那樣,如果輸入是「測試999-99」或「測試999-99-9」,我只想輸出「測試999- 99「(如果存在,則忽略最後的-9)。或者,正如我在第二段中解釋的那樣,如果它只是返回「測試」,那也可以(我可以使用我已經寫過的不同表達式來分離999-99模式)。請記住,字符串的字符部分可能不止一個單詞,如果這有所作爲。 – tjc59 2012-07-06 13:49:26

回答

1

正則表達式忽略999-99-9,就回到 「測試」 部分:

^([\w ]+) [\d]{3}-[\d]{2}-?[\d]?$ 

OCR軟件支持組:

http://www.laserfiche.com/NewsPortal/Article/2012/05/21/tech-tip-pattern-matching-with-regular-expressions

注:括號確定哪些信息是從 中提取的文字。其他字符決定了尋找 的模式。例如,\ d \ d \ d- \ d \ d - (\ d \ d \ d \ d)將找到社會安全號碼並返回它的最後四位數字。

+0

我在http://regexpal.com/測試這個,它似乎返回整個字符串,而不僅僅是第一部分。 – tjc59 2012-07-06 13:58:47

+0

它匹配整個字符串,但只返回「Test」部分作爲組1,您可以使用$ 1訪問大多數正則表達式系統 – 2012-07-06 14:03:14

+0

我想我不熟悉組或者如何訪問它們。我只是將1美元貼到表達式的末尾?另外,「測試」部分可以是多個詞;我不確定這是否會匹配多個單詞。對困惑感到抱歉。 – tjc59 2012-07-06 14:10:16

0

^(Test \d{3}-\d{2})(-\d{1})?$將從您的示例中返回除最後一個「-9」以外的所有內容,無論是否存在「-9」。

+0

當我測試它時,無論如何,這似乎都會返回所有內容。此外,「測試」一詞不是靜態的;它可能是一系列不同的單詞。我基本上試圖對與999-99或999-99-9模式不匹配的所有內容進行反向匹配。 – tjc59 2012-07-06 13:54:27

+0

這是令人恐懼的RegEx。你完全匹配「測試」這個詞,並且你匹配最後的9個,但把它當作第二個組。 – 2012-07-06 13:56:51