ruby .split('\ n')不在新行拆分


82

为什么在每个“ \ n”上不拆分此字符串?(红宝石)

"ADVERTISING [7310]\n\t\tIRS NUMBER:\t\t\t\t061340408\n\t\tSTATE OF INCORPORATION:\t\t\tDE\n\t\tFISCAL YEAR END:\t\t\t0331\n\n\tFILING VALUES:\n\t\tFORM TYPE:\t\t10-Q\n\t\tSEC ACT:\t\t1934 Act\n\t".split('\n')
>> ["ADVERTISING [7310]\n\t\tIRS NUMBER:\t\t\t\t061340408\n\t\tSTATE OF INCORPORATION:\t\t\tDE\n\t\tFISCAL YEAR END:\t\t\t0331\n\n\tFILING VALUES:\n\t\tFORM TYPE:\t\t10-Q\n\t\tSEC ACT:\t\t1934 Act\n\t"]

Answers:


172

你需要.split("\n")。需要使用字符串插值来正确解释新行,并且双引号是实现此目的的一种方法。


39

在Ruby中,字符串周围的单引号表示不解释转义字符。与C语言不同,C语言中的单引号表示单个字符。在这种情况下'\n',实际上等于"\\n"

因此,如果您想拆分,则\n需要更改代码以使用双引号。

.split("\n")


22

Ruby有方法String#each_lineString#lines

返回一个枚举:http : //www.ruby-doc.org/core-1.9.3/String.html#method-i-each_line

返回一个数组:http : //www.ruby-doc.org/core-2.1.2/String.html#method-i-lines

我没有针对您的情况对其进行测试,但是我敢打赌它比手动选择换行符更好。


但要注意,#lines这不会删除换行符,而#split将这样做: "a\nb".lines => ["a\n", "b"]while"a\nb".split("\n") => ["a", "b"]
tanius

另外,对于以文本模式(默认)读取的文件,换行符序列会转换为"\n"请参阅参考资料)。因此,无需手动选择它们。"\n"跨平台使用。
塔尼厄斯


3

您不能为此使用单引号:

"ADVERTISING [7310]\n\t\tIRS NUMBER:\t\t\t\t061340408\n\t\tSTATE OF INCORPORATION:\t\t\tDE\n\t\tFISCAL YEAR END:\t\t\t0331\n\n\tFILING VALUES:\n\t\tFORM TYPE:\t\t10-Q\n\t\tSEC ACT:\t\t1934 Act\n\t".split("\n")
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.