2

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

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

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

给定我想要匹配的字符串 = 比赛的距离是 10 英里。

我尝试了以下方法:正则表达式 =/.\s.*[miles.|yards.]/

match = match.regex(My_String) `

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

更新:

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

我开始认为 Kirill 的表达式确实有效,但我用来测试它的 Rubular 引擎可能不支持它。

最终更新:

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

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

感谢大家的帮助。

4

2 回答 2

2

试试这个:

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

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

于 2012-10-07T23:26:22.700 回答
0

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

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

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

于 2012-10-07T23:32:49.373 回答