Ruby正则表达式:查找最后一个标点符号

3

我正在尝试查找句子中的最后一个标点符号或空格。

假设我有这个句子:"Hello! What is your name?"

我想要正则表达式返回?的索引,但是我的正则表达式返回了!的索引。

我的尝试:

> s = "Hello! What is your name?"
> s =~ /([[:punct:]\s])/
> puts $+
!
=> nil

我认为$+返回最高匹配,也就是最后一个匹配项,但它只匹配第一个。

你有什么想法? 提前感谢您!

2个回答

5

使用rindex查找最后一个匹配项:

s = "Hello! What is your name?"
i = s.rindex(/[[:punct:]]/)
puts i

结果:

24

请查看在线演示:ideone

谢谢您告诉我这个错别字,我没有复制/粘贴,而是重新打了一遍。 - ardavis
哇,有趣。我也不知道rindex。听起来我们有两个解决方案。谢谢!! - ardavis

3
对阵:
/[[:punct:]\s][^[:punct]\s]*\z/

您的示例结果将在24小时内返回。

正则表达式匹配标点符号或空格后只跟非标点符号或空格字符,然后是字符串结尾。因此,它会找到字符串中的最后一个标点符号/空格。

$+并没有帮助,因为它不能神奇地多次匹配正则表达式。它只返回最近匹配的最后一个组。如果您的表达式中有7个组,它将等同于$7

"abcdefghijklmnopq" =~ /(.)(.)(.)(.)(.)(.)(.)/  # 0
$+ # "g"

非常感谢,那很有道理!我不知道为什么我没想到 :) - ardavis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接