Ruby String.scan和String.split之间的差异

Ruby String.scan和String.split之间的差异,ruby,Ruby,Ruby中的这两个(String#scan和String#split)之间有什么区别?它们的用途完全不同。用于从字符串中提取正则表达式的匹配项并返回数组中的匹配项,而用于根据分隔符将字符串拆分为数组。分隔符可以是静态字符串(如;在单个分号上拆分)或正则表达式(如/\s/+在任何空白字符上拆分) String#split的输出不包含分隔符。相反,除了分隔符之外的所有内容都将在输出数组中返回,而String#scan的输出将只包含与分隔符匹配的内容 # A delimited string spli

Ruby中的这两个(
String#scan
String#split
)之间有什么区别?

它们的用途完全不同。用于从字符串中提取正则表达式的匹配项并返回数组中的匹配项,而用于根据分隔符将字符串拆分为数组。分隔符可以是静态字符串(如
在单个分号上拆分)或正则表达式(如
/\s/+
在任何空白字符上拆分)

String#split
的输出不包含分隔符。相反,除了分隔符之外的所有内容都将在输出数组中返回,而
String#scan
的输出将只包含与分隔符匹配的内容

# A delimited string split on | returns everything surrounding the | delimiters
"a|delimited|string".split("|")
# Prints: ["a", "delimited", "string"]

# The same string scanninng for | only returns the matched |
"a|delimited|string".scan("|")
# Prints: ["|", "|"]
上述两种方法都可以接受正则表达式来代替简单字符串
“|”


有什么区别?它们唯一的共同点是它们都是从
字符串
对象或子类调用的。什么东西看起来如此令人困惑?这个问题可以通过查看ruby文档来解决。
# Split on everything between and including two t's
"a|delimited|string".split(/t.+t/)
# Prints: ["a|delimi", "ring"]

# Search for everything between and including two t's
"a|delimited|string".scan(/t.+t/)
# Prints: ["ted|st"]