python拆分多个分隔符bug?

dip*_*kar 4 python regex python-2.7

我正在查看这个早先提出的问题的回答:

带有多个分隔符的拆分字符串?

对于这个问题的变体,我想分开一些不是来自特定字符集的内容.这让我得到了一个我喜欢的解决方案,直到我发现了这个明显的错误.这是一个我不熟悉的bug或python的怪癖吗?

>>> b = "Which_of'these-markers/does,it:choose to;split!on?"
>>> b1 = re.split("[^a-zA-Z0-9_'-/]+", b)
>>> b1
["Which_of'these-markers/does,it", 'choose', 'to', 'split', 'on', '']
Run Code Online (Sandbox Code Playgroud)

鉴于逗号不在我的例外列表中,我不明白它为什么不用逗号分隔(',')?

Wik*_*żew 7

'-/一个字符类中创建包括逗号的范围:

在此输入图像描述

当你需要在Python re模式中放置一个文字连字符时,把它放:

  • 在开始时:( [-A-Z]匹配大写的ASCII字母和-)
  • 最后:( [A-Z()-]匹配大写的ASCII字母(,, )-)
  • 在有效范围之后:( [A-Z-+]匹配大写的ASCII字母,-+)
  • 或者只是逃避它.

你不能把它放在一个简写之后,就在一个独立的符号之前(因为[\w-+]它会导致一个糟糕的字符范围错误).这在.NET和其他一些正则表达式中有效,但在Python中无效re.

将连字符放在其末尾,或将其转义.

使用

re.split(r"[^a-zA-Z0-9_'/-]+", b)
Run Code Online (Sandbox Code Playgroud)

在Python 2.7中,您甚至可以将其收缩

re.split(r"[^\w'/-]+", b)
Run Code Online (Sandbox Code Playgroud)

  • 在将文字`-`放入Python`re`模式中的字符类时,我添加了几个要记住的东西.虽然这些信息可以在SO上找到,但它似乎分散在不同的答案中. (2认同)