2012-04-02 24 views
1

我試圖得到這個字符串的第一個單詞:Basic (11/17/2011 - 12/17/2011)這個字符串的Ruby正則表達式?

所以最終想要得到Basic

其他例子字符串:Premium (11/22/2011 - 12/22/2011)

格式始終是「單字後面括號中的日期範圍」,我只是想一個單詞。

+0

您是否在尋找內的該結構任意通過文字?當前的問題語句只給出在'Basic(2011年11月17日 - 2011年12月17日)'中查找'Basic'的答案。 – RobinGower 2012-04-02 16:23:44

回答

4

使用此:

str = "Premium (11/22/2011 - 12/22/2011)" 
str.split.first # => "Premium" 

分割使用' '默認參數,如果你不指定任何。
之後,得到的第一個元素與first

+0

這個方法中的date參數在哪裏? – sln 2012-04-02 17:11:19

+0

像這樣:'「高級(2011/11/22 - 2011/12/22)」。split.first' – 2012-04-02 17:20:04

+0

我認爲他期待可變的輸入。你怎麼知道「括號內的日期範圍」在那裏? – sln 2012-04-06 20:51:26

2

你不需要爲正則表達式,你可以使用

str.split(' ')[0] 
+0

這將返回第一個單詞,不管它是否出現在括號內的日期範圍之前。它還假定所需的字符串出現在字符串的開頭。 – 2012-04-02 16:16:57

+0

他在自己的問題中說,它總是這種格式。 – 2012-04-02 16:17:42

+0

當日期參數不在字符串中時會發生什麼? – sln 2012-04-02 17:12:36

0

這個正則表達式將第一個字用在尾隨空間

"^\w+ ??" 
0

匹配。如果你真的想要一個正則表達式,你可以使用此之後獲得的第一組正則表達式:

(\w*) .* 
+0

這匹配一個只包含一個空格的字符串。 – sln 2012-04-02 17:14:51

+0

不,'。'也可以是空格 – 2012-04-03 08:13:48

+0

正則表達式中唯一需要的是空間,其他所有內容都是可選的。因此,具有單個空格的字符串與您的正則表達式中的空格相匹配。即使 '。'會匹配一個空格,在這種情況下它不會匹配它。 – sln 2012-04-06 20:47:42

1

我知道你發現你需要的答案,但萬一有人在此跌倒在未來,以拉所需的值了大量的未知長度的10:

word_you_need = s.slice(/(\b[a-zA-Z]*\b \(\d+\/\d+\/\d+ - \d+\/\d+\/\d+\))/).split[0] 
+0

'\ b。* \ b'本身與「Basic(2011年11月17日 - 2011年12月17日)」相匹配,甚至「\ b。*?\ b」都與「Basic training」匹配。 – sln 2012-04-02 17:07:51

+0

好點。我已將'\ b。* \ b'更改爲'\ b [a-zA-Z] * \ b'。所以這應該工作,除非預期的單詞有連字符或任何其他特殊字符。 – 2012-04-02 17:34:23

+0

爲什麼不只是'/(\ S * \ s + \(\ d + \/\ d + \/\ d + - \ d + \/\ d + \/\ d + \))/'那麼? – sln 2012-04-06 21:05:14

0

「單字後面括號中的日期範圍」

「字」和「括號日期範圍」應更好地定義
爲,通過您的要求聲明,他們應該作爲錨點和/或分界線。

這些原始正則表達式只是一個普遍的猜測。

\w+(?=\s*\([^)]*\)) 

\w+(?=\s*\(\s*\d+(?:/\d+)*\s*-\s*\d+(?:/\d+)*\s*\)) 
0

其實,你需要的是:

s.split[0] 

......或者......

s.split.first 
相關問題