2016-03-14 74 views
-2

我在寻找正则表达式,它可以让我找到句子中倒数第n个单词。 我有字符串:正则表达式 - 从第n个单词到最后一个

Lorem Ipsum is simply dummy text of the printing 

我想获得

simply dummy text of the printing 

如何正则表达式应该是什么样子?

谢谢。

+1

您正在使用哪种编程语言? –

+0

我正在使用Ruby。 – Przemek903

+0

您不需要正则表达式 –

回答

0

为PCRE

^\w+\s+\w+\s+(.*) 

应该工作,你需要从比赛中提取分组1。如果少于3个单词,则不会匹配。

+0

它的效果很好。谢谢:) – Przemek903

4

为什么你会在这里使用regexp?

n = 3 
s = 'Lorem Ipsum is simply dummy text of the printing' 
p s.split[n..-1] #=> ["simply", "dummy", "text", "of", "the", "printing"] 
p s.split[n..-1].join(' ') #=> "simply dummy text of the printing" 
+0

重新阅读这个问题后(和upvoting你的答案后:-))我很确定OP想要一个字符串(不是数组)返回。我这样说是因为“印刷品的虚拟文本”与给定的字符串格式相同,并且还根据OP对@Peter的答案的评论。您可以在'.join'上添加粘性,但这可能会改变单词之间的间距。 –

+0

@CarySwoveland感谢您的评论,我认为使用'.join'返回一个字符串是很明显的,假设这是一个正确的“句子”,如问题中所述 –

1

我假设给定的字符串不包含标点符号(逗号,分号,冒号,句号,问号等),你想返回一个字符串(排除的前两个单词和空格以下第二个字)。

在构造正则表达式时,必须考虑到某些词汇是收缩或被连字符的事实。

r =/
    \A   # match start of string 
    (?:  # begin a non-capture group 
     [a-z'-]+ # match >= characters in character class 
     \s+  # match > 0 characters 
    ){2}  # end non-capture group and match it twice 
    /xi 

"It's tea-time at the Ritz".gsub(r, '') 
    #=> "at the Ritz" 
相关问题