我需要一个正则表达式来匹配以两个特定单词之一结尾的句子

时间:2012-10-07 22:59:38

标签: regex

我需要一个正则表达式来匹配以三个单词之一结尾的句子。

例如,假设这三个词是:英里和码。

My_String = 2012年10月5日,一场比赛在华盛顿特区举行。比赛中有400名参赛者。比赛的距离是十英里。

鉴于我想要匹配的字符串=比赛的距离是十英里。

我尝试了以下方法:regex = /.\s.*[miles.|yards.]/

match = match.regex(My_String) `

但这与我感兴趣的句子之前的所有句子以及我感兴趣的句子相匹配。

更新

Kirill Polishchuk提出了一个似乎让我非常接近的解决方案(见下文)。不幸的是,当我把它放入Rubular表达式测试器时,它只是突出显示目标句子,但不会将其作为匹配返回。

我开始认为Kirill的表达式实际上正在运行,但在我用来测试它的Rubular引擎中可能不支持它。

最终更新:

以下表达式成功匹配目标句子:

([^.]*(?:miles|yards)\.)

感谢大家的帮助。

2 个答案:

答案 0 :(得分:2)

试试这个:

[^.]*(?:miles|yards)\.

在这个正则表达式中,我假设句子以.符号结尾。使用正则表达式确定句子边界确实很复杂。

答案 1 :(得分:0)

好的,第一个问题是你应该使用括号时使用方括号。 [abc] 匹配与方括号内的任何字符匹配的单个字符。因此,您匹配任何包含 m i l (等等)的行。

另一个问题是,如果你真的想要匹配那个角色,必须转义;如果没有转义,它是一个匹配任何单个字符的特殊正则表达式字符。所以你应该a)将它移到括号之外(你只是浪费空间输入两次)和b)用* * 转义它。

正则表达式的前半部分令人费解;它匹配任何单个字符(),后跟一个空格项( \ s ),后跟任意数量的未指定字符(。* )。你想要实现什么目标?