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

t5fffqht  于 2023-08-04  发布在  Ruby
关注(0)|答案(5)|浏览(106)

如何从Ruby中的字符串中提取子字符串?
示例如下:

String1 = "<name> <substring>"

字符串
我想从String1中提取substring(即<>的最后一次出现中的所有内容)。

t0ybt7op

t0ybt7op1#

"<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

kyks70gy

kyks70gy2#

String1.scan(/<([^>]*)>/).last.first

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

6ss1mwsb

6ss1mwsb3#

你可以很容易地使用正则表达式来实现这个目标...
允许单词周围有空格(但不保留):

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

字符串
或不允许空格:

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

qij5mzcb

qij5mzcb4#

这里有一个稍微灵活一点的方法,使用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"

字符串

w6mmgewl

w6mmgewl5#

更简单的扫描将是:

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

字符串

相关问题