2017-11-04 62 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

确实。作为一般规则,我倾向于对正则表达式有点偏执,因为你永远不知道什么引擎会运行表达式哈哈 –