我需要一个正则表达式来匹配以三个单词之一结尾的句子。
例如,假设这三个词是:英里和码。
My_String = 2012年10月5日,一场比赛在华盛顿特区举行。比赛中有400名参赛者。比赛的距离是十英里。
鉴于我想要匹配的字符串=比赛的距离是十英里。
我尝试了以下方法:regex = /.\s.*[miles.|yards.]/
和match = match.regex(My_String)
`
但这与我感兴趣的句子之前的所有句子以及我感兴趣的句子相匹配。
更新
Kirill Polishchuk提出了一个似乎让我非常接近的解决方案(见下文)。不幸的是,当我把它放入Rubular表达式测试器时,它只是突出显示目标句子,但不会将其作为匹配返回。
我开始认为Kirill的表达式实际上正在运行,但在我用来测试它的Rubular引擎中可能不支持它。
最终更新:
以下表达式成功匹配目标句子:
([^.]*(?:miles|yards)\.)
感谢大家的帮助。
答案 0 :(得分:2)
试试这个:
[^.]*(?:miles|yards)\.
在这个正则表达式中,我假设句子以.
符号结尾。使用正则表达式确定句子边界确实很复杂。
答案 1 :(得分:0)
好的,第一个问题是你应该使用括号时使用方括号。 [abc] 匹配与方括号内的任何字符匹配的单个字符。因此,您匹配任何包含 m 或 i 或 l (等等)的行。
另一个问题是,如果你真的想要匹配那个角色,必须转义。;如果没有转义,它是一个匹配任何单个字符的特殊正则表达式字符。所以你应该a)将它移到括号之外(你只是浪费空间输入两次)和b)用* * 转义它。
正则表达式的前半部分令人费解;它匹配任何单个字符(。),后跟一个空格项( \ s ),后跟任意数量的未指定字符(。* )。你想要实现什么目标?