使用正则表达式获取第二个数字和后面的单词

Grab the second number and the word after it using regexp

我有一个字符串:

str = "1 - hello world 1234 abc 5678 def"

我想从字符串中抓取1234 abc

我目前的实现str[/\d+\s*\D*$/]只抓取最后一个数字。

您可以使用

str[/\d+\D+(\d+\s*\w+)/, 1]
str[/\d+\D+\K\d+\s*\w+/]

参见this regex demo and this regex #2 demo

此处,仅搜索第一个正则表达式匹配项。 详情:

  • \d+ - 一位或多位数字
  • \D+ - 一个或多个 non-digits
  • (\d+\s*\w+) - 第 1 组:一个或多个数字、零个或多个空格以及一个或多个单词字符
  • \K - 匹配重置运算符,丢弃到目前为止匹配的所有文本。

注意:

  • 如果“单词”是 non-whitespace 个字符的块,请将 \w+ 替换为 \S+
  • 如果您想支持浮点值(带小数部分的数字),您需要将 \d+ 替换为 \d*\.?\d+\d+(?:\.\d+)? 模式。

这是一个Ruby test:

str = "1 - hello world 1234 abc 5678 def"
puts str[/\d+\D+(\d+\s*\w+)/, 1]
# => 1234 abc
puts str[/\d+\D+\K\d+\s*\w+/]
# => 1234 abc