我有一个由\t
和,
分隔的字符串,但是\t
的个数不固定,例如:
a=["seg1\tseg2\t\tseg3,seg4"]
seg2
和seg3
由两个\t
分隔。
所以我试着把它们分开
a.split(/\t+|,/)
它打印出正确的答案:
["seg1", "seg2", "seg3", "seg4"]
我也试试这个
a.split(/[\t+,]/)
但答案是
["seg1", "seg2", "", "seg3", "seg4"]
为什么 ruby 打印出不同的结果?
最佳答案
因为 []
里面的 \t+
并不表示“一个或多个制表符”,而是表示“一个制表符或一个加号”。因为它找到了两个连续的制表符,所以它 split 了两次,中间的字符串变成了空。
大多数特殊字符,如 。 + * ?
等,当放置在一个间隔中时成为“常规”字符。有一些异常(exception),比如 ^
(当放在开头时否定间隔),\
(转义下一个字符,就像它在外面一样intervals) 和 ]
(关闭间隔;另一个 [
也是不允许的)。所以,[\t+,]
实际上意味着 '\t' 或 '+' 或 ','
。
不幸的是,我不知道需要或不需要在间隔内转义的完整字符集的任何引用。有疑问,我倾向于逃避只是为了确定。在任何情况下,一个间隔总是只匹配一个字符,如果你想要不同的东西,你必须把你的量词放在外面间隔。 (例如:[\t,]+
,如果你也承认连续有两个逗号;否则,你的第一个正则表达式真的是正确的)
关于ruby - 使用 Ruby 拆分字符串时,/\t+|,/和/[\t+,]/之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9866777/