2011-07-03 32 views
0

假設一個人的帖子此消息:正則表達式的難題解析結構化崗位

「#books‘戰爭與和平’列夫·托爾斯泰 - 我喜歡這本書。」

我想分析到這三個變量,就像這樣:

@title = 「戰爭與和平」

@author = 「托爾斯泰」

@comment = 「我喜歡這本書」

我敢肯定,這是一個正則表達式忍者的簡單難題。不幸的是,我只是一個低賤的村民,在那裏真正的Regex Ninjas火車上擦着流血汗淋的地板。

BONUS點,如果你可以建議一個正則表達式在消息發佈不需要太多的結構。理想情況下,我希望獲得相同的三個變量,但不包含結構(或者至少具有較少的結構/要求):@author - @comment的「@title」。

謝謝!

回答

0
regex = /'(.+)'\s+by\s+(.+)\s+-\s+(.+)/ 
"#books 'War and Peace' by Leo Tolstoy - I love this book.".scan(regex) 

=> 

[["War and Peace", "Leo Tolstoy", "I love this book."]] 
+0

謝謝@Violent Crayon和Dogbert的出色建議。我選擇了這個答案,因爲它開箱即用。 – MorningHacker

-1
/["'](.*?)["'] by (.*?)\s+-\s+(.*)/ 
0

我不知道的Ruby語法,但正則表達式本身你給會看起來像這樣的格式:

#books\s'([^']+)'\s+by\s+([^-]+)-\s+(.*)

但是,爲了回答你的問題有關不使它所以依賴於格式......理想情況下,你應該把它分成3個獨立的字段來填寫。或者如果它是在消息後的一般內容,並在尋找一個特定的格式(有點像設置高亮),那麼我會建議更多的東西一樣

[書名=「標題」作者=「作者」]評論[/書]

這將更容易解析。

+0

我的猜測是,這個人試圖解析Twitter的帖子,從他們的例子中存在的話題標籤來判斷。 – Amber

+0

mmm yah可以是 –

+0

正確;理想情況下,這將解析類似Twitter的帖子。 – MorningHacker

0

(["'])(?<title>[^"']*)\1\s+by\s+(?<author>[\p{L}\s']+)\s*-\s*(?<comment>.*)$

關於第二個評論:這是不可能實現使用正則表達式只,因爲看definition of regex - 定期表達你的句子可能是不規則

0

另一種答案:

你可以挑選你知道是不是要經常露面,只是通過拆分字符串分隔符。然後強制執行標準/假定值的順序(你或多或少已經在做)。因此,例如,你可以有人崗

「戰爭與和平〜托爾斯泰〜我喜歡這本書」

,然後就爆炸/分在~並假設第一個元素是標題,第二個是作者,第三名發表評論。