【问题标题】:I need a regular expression that matches sentences that end with one of two particular words我需要一个正则表达式来匹配以两个特定单词之一结尾的句子
【发布时间】:2012-10-07 22:59:37
【问题描述】:

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

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

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

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

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

match = match.regex(My_String) `

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

更新:

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

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

最终更新:

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

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

感谢大家的帮助。

【问题讨论】:

    标签: regex


    【解决方案1】:

    试试这个:

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

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

    【讨论】:

    • 这非常接近。当我在 Rubular 中进行测试时,它会突出显示整个句子,但仅返回码或英里作为实际匹配项。
    • @Mutuelinvestor,我已经更新了答案。现在正则表达式包含不匹配的组 (?:)。尝试一下。我不知道您的正则表达式引擎是否支持此功能。
    • 不完全在那里。现在它突出显示句子,但不返回任何匹配项。 : 做什么?我不熟悉它。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-11
      • 2013-01-23
      相关资源
      最近更新 更多