2017-11-04 97 views
1

我將在語法的句子像替代詞和詞用連字符

<開始> 的<對象> <動詞>今晚閱讀。

<開始> <博覽會> <衝突> <逃生> <結論>

<博覽會> <壞傢伙> <瘋狂計劃>

我有一個函數得到的句子,應該取代任何有<單詞>

while is_non_terminal?(sentence) 
    sentence.sub!(/(<\w+>)/){grammar[[$1]].sample.join(' ')} 
end 

會讀第一句罰款和更換的話,我的問題是,它不會取代的話就像<壞傢伙>,因爲連字符 我試圖改變內容的分! (
)我不知道如何將兩個常規單詞替換爲<>和連字符的單詞

+0

你需要做一個字符用方括號設置:/(<[-\w]+>) – CAustin

回答

2

您可以使用以下正則表達式同時匹配連字符和普通的話:

/(\<[a-zA-Z\-]+\>)/

該讀取:<>之間匹配任何字符重複序列要麼a and zA and Z-字符之間。

如果你仍然習慣正則表達式,下面的網站可以幫助你練習:https://regex101.com/

另外,記住你輸入的<後有空格的標籤和>,因此,您需要考慮到這一點。下面這樣做。

/(\< [a-zA-Z\-]+ \>)/

乾杯,

+1

我覺得這是值得指出的是沒有在這些模式中的字符都需要用反斜槓轉義'/'。 – CAustin

+0

確實。作爲一般規則,我傾向於對正則表達式有點偏執,因爲你永遠不知道什麼引擎會運行表達式哈哈 –