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