使用正则表达式获取第二个数字和后面的单词
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
我有一个字符串:
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