当使用Ruby拆分字符串时,/ \ t + |,/和/ [\ t +,] /之间的区别是什么?

时间:2012-03-26 04:58:00

标签: ruby regex split

我有\t,分隔的字符串,但\t的数量不固定,例如:

a=["seg1\tseg2\t\tseg3,seg4"]

seg2seg3由两个\t分隔。

所以我尝试通过

分割它们
a.split(/\t+|,/)

它打印右侧的anwser:

["seg1", "seg2", "seg3", "seg4"]

我也试试这个

a.split(/[\t+,]/)

但答案是

["seg1", "seg2", "", "seg3", "seg4"]

为什么ruby打印出不同的结果?

1 个答案:

答案 0 :(得分:5)

由于\t+中的[]并不代表“一个或多个标签”,因此它表示“标签或加号”。由于它找到两个连续的标签,它会分割两次,中间的字符串变为空。

大多数特殊字符(如. + * ?等)放置在间隔中时会成为“常规”字符。有一些例外,例如^(在开头放置时会取消间隔),\(逃脱下一个字符,就像在外部间隔一样)和{{ 1}}(关闭间隔;另外]也不允许)。因此,[实际上意味着[\t+,]

不幸的是,我不知道在一个区间内需要或不需要转义的全套字符的引用。有疑问,我倾向于逃避只是为了确定。在任何情况下,间隔始终只与单个字符匹配,如果您想要不同的东西,则必须将量词置于区间之外。 (例如:'\t' or '+' or ',',如果你也允许连续使用两个逗号;否则,你的第一个正则表达式确实是正确的一个)