2011-10-14 202 views
2

我一直在試圖抓住句子內的第一個位置名稱。所需的位置名稱將正好開始於第一句的第二個首都,然後第一個點之前正好結束正則表達式獲取文本

例(。):

It is located at Supreme Court. Follow by some other text. 
       ^  ^

期望了把

最高法院

對不起,我不能告訴你我到目前爲止有一段代碼。經過一個小時的努力,我沒有任何具體的東西。

如果您在Ruby中顯示代碼示例將受到高度讚賞。

+0

你有什麼難處?匹配大寫字母,匹配一個點,或提供所需的輸出,一旦你做了比賽? –

回答

4

此正則表達式:

regexp = /^.*?[A-Z].*?([A-Z].*?)\./ 
match = regexp.match(subject) 
if match 
    match = match[1] 
else 
    match = "" 
end 

會產生:Supreme Court

我從匹配的第一個首都,而忽略其他的everyhting字符串的開頭開始。然後我匹配第二個首都,並將結果保存到反向引用1中,直到第一個點。

1

這爲我工作:

irb(main):001:0> location = "It is located at Supreme Court. Follow by some other text." 
=> "It is located at Supreme Court. Follow by some other text." 
irb(main):002:0> location.match(/[^A-Za-z][\bA-Z][\w\s]*\./) 
=> #<MatchData "Supreme Court."> 
+0

OP要求匹配從第二個資本到句子結尾的所有內容。你的正則表達式假定只有兩個單詞。 – Larsenal

+1

編輯一下,我覺得現在好多了。 –

1
s = 'It is located at Supreme Court. Follow by some other text.' 
m = s.match /[A-Z][^A-Z]+([A-Z][^\.]+)/ 
result = m[1] #Supreme Court 
0

試試這個:

s = 'It is located at Supreme Court. Follow by some other text.' 
/[A-Z].+?([A-Z].*)\..+?/.match(s)[1] 
0

這假設有在字符串的開頭沒有空間,因此它看起來的第一個大寫字母是來到一個空間之後,抓住任何東西,直到它找到的第一個時期。

str = "It is located at Supreme Court. Follow by some other text." 
m = str.match(/\s([A-Z].*?)\./) 
location = m.nil? ? "" : m[1] #just in case there's no match 

p location #=> Supreme Court