我有\t
和,
分隔的字符串,但\t
的数量不固定,例如:
a=["seg1\tseg2\t\tseg3,seg4"]
seg2
和seg3
由两个\t
分隔。
所以我尝试通过
分割它们a.split(/\t+|,/)
它打印右侧的anwser:
["seg1", "seg2", "seg3", "seg4"]
我也试试这个
a.split(/[\t+,]/)
但答案是
["seg1", "seg2", "", "seg3", "seg4"]
为什么ruby打印出不同的结果?
答案 0 :(得分:5)
由于\t+
中的[]
并不代表“一个或多个标签”,因此它表示“标签或加号”。由于它找到两个连续的标签,它会分割两次,中间的字符串变为空。
大多数特殊字符(如. + * ?
等)放置在间隔中时会成为“常规”字符。有一些例外,例如^
(在开头放置时会取消间隔),\
(逃脱下一个字符,就像在外部间隔一样)和{{ 1}}(关闭间隔;另外]
也不允许)。因此,[
实际上意味着[\t+,]
。
不幸的是,我不知道在一个区间内需要或不需要转义的全套字符的引用。有疑问,我倾向于逃避只是为了确定。在任何情况下,间隔始终只与单个字符匹配,如果您想要不同的东西,则必须将量词置于区间之外。 (例如:'\t' or '+' or ','
,如果你也允许连续使用两个逗号;否则,你的第一个正则表达式确实是正确的一个)