2012-10-07 33 views
2

我需要一個正則表達式來匹配以三個單詞之一結尾的句子。我需要一個正則表達式來匹配以兩個特定單詞之一結尾的句子

例如,假設三個詞是:英里和碼。

My_String = 2012年10月5日在華盛頓特區舉辦的一場比賽中,有400名選手參加比賽。比賽的距離是十英里。

鑑於我想匹配的字符串=比賽的距離是十英里。

我曾嘗試以下:正則表達式= /.\s.*[miles.|yards.]/

match = match.regex(My_String) `

但是,這我感興趣的句子,以及我感興趣的句子之前,匹配所有的句子。

更新:

基里爾舒克想出了,似乎讓我很接近(見下文)的解決方案。不幸的是,當我將它放入Rubular表達式測試器時,它只是簡單地強調了目標語句,但不會將其作爲匹配返回。

我開始認爲Kirill的表達式實際上正在工作,但它可能不支持我用來測試它的Rubular引擎。

最後更新:

下面的表達式匹配成功的目標一句:

([^.]*(?:miles|yards)\.) 

感謝大家的幫助。

回答

2

試試這個:

[^.]*(?:miles|yards)\. 

在這個表達式我認爲這句話有.符號結束。使用正則表達式確定句子的邊界真的很複雜。

+0

這非常接近。當我在Rubular中測試時,它會突出顯示整個句子,但只會返回實際比賽的碼數或英里數。 – Mutuelinvestor

+1

@Mutuelinvestor,我已經更新了答案。現在,正則表達式包含不匹配的組('?:')。嘗試一下。我不知道你的正則表達式引擎是否支持這個功能。 –

+0

並不完全。現在它突出顯示句子,但不會返回任何內容作爲匹配。這是做什麼的?我不熟悉它。 – Mutuelinvestor

0

好的,第一個問題是當你使用括號時你使用方括號。 [abc]匹配與方括號內的任何字符匹配的單個字符。因此,您要匹配任何包含mil(依此類推)的行。

另一個問題是,。如果你真的想要匹配那個角色,必須逃脫;如果不逃脫,它是一個特殊的正則表達式字符匹配任何單個字符。所以你應該a)把它移到括號外(你只是浪費空間鍵入它兩次)和b)用* *轉義它。

你的正則表達式的前半部分令人費解;它匹配任何單個字符(,),後跟單個空白項(\ s),後跟任意數量的未指定字符(。*)。你想達到什麼目的?

相關問題