使用正则表达式从 Ruby 中的字符串中提取子字符串

如何在 Ruby 中从字符串中提取子字符串?

例如:

String1 = "<name> <substring>"

我想从 String1中提取 substring(即 <>上次出现的所有内容)。

172551 次浏览
String1.scan(/<([^>]*)>/).last.first

scan创建一个数组,对于 String1中的每个 <item>,该数组在一个单元数组中包含 <>之间的文本(因为当与包含捕获组的正则表达式一起使用时,扫描将创建一个包含每个匹配的捕获的数组)。last给出最后一个数组,然后 first给出其中的字符串。

你可以很容易地使用正则表达式..。

允许单词周围有空格(但不保留它们) :

str.match(/< ?([^>]+) ?>\Z/)[1]

或者没有允许的空间:

str.match(/<([^>]+)>\Z/)[1]
"<name> <substring>"[/.*<([^>]*)/,1]
=> "substring"

如果我们只需要一个结果,就不需要使用 scan
当我们有 Ruby 的 String[regexp,#]时,不需要使用 Python 的 match

见: http://ruby-doc.org/core/String.html#method-i-5B-5D

注: str[regexp, capture] → new_str or nil

这里有一个使用 match方法的更灵活的方法,通过这个方法,您可以提取多个字符串:

s = "<ants> <pants>"
matchdata = s.match(/<([^>]*)> <([^>]*)>/)


# Use 'captures' to get an array of the captures
matchdata.captures   # ["ants","pants"]


# Or use raw indices
matchdata[0]   # whole regex match: "<ants> <pants>"
matchdata[1]   # first capture: "ants"
matchdata[2]   # second capture: "pants"

一个更简单的扫描方法是:

String1.scan(/<(\S+)>/).last