python拆分多个分隔符错误?

python拆分多个分隔符错误?,python,regex,python-2.7,Python,Regex,Python 2.7,我在看对这个问题的回答: 对于这个问题的变体,我想对不是来自特定字符集的所有内容进行分割。这让我找到了一个我喜欢的解决方案,直到我发现了这个明显的错误。这是我不熟悉的python的bug还是怪癖 >>> b = "Which_of'these-markers/does,it:choose to;split!on?" >>> b1 = re.split("[^a-zA-Z0-9_'-/]+", b) >>> b1 ["Which_of'the

我在看对这个问题的回答:

对于这个问题的变体,我想对不是来自特定字符集的所有内容进行分割。这让我找到了一个我喜欢的解决方案,直到我发现了这个明显的错误。这是我不熟悉的python的bug还是怪癖

>>> 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', '']

我不明白为什么它不在逗号(“,”)上拆分,因为逗号不在我的异常列表中

字符类中的
”-/
创建了一个包含逗号的范围:

当您需要在Python
re
模式中放置文字连字符时,请将其放置:

  • 开头:
    [-A-Z]
    (匹配大写ASCII字母和
    -
  • 结尾:
    [A-Z()-]
    (匹配大写ASCII字母,
    -
  • 在有效范围之后:
    [a-Z-+]
    (匹配大写ASCII字母,
    -
    +
  • 或者干脆逃避它
不能将其放在简写符号之后,即独立符号之前(如
[\w-+]
中所示,这将导致错误的字符范围错误)。这在.NET和其他一些正则表达式版本中有效,但在Python
re
中无效

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

使用

在Python2.7中,您甚至可以将其与

re.split(r"[^\w'/-]+", b)

”-/
被解释为具有39到47的值的范围,其中包括具有ascii值44的


您必须将
-
放在字符类的开头或结尾

可能是因为
”-/
。它被解释为范围。不知道像
\w
这样的东西在
[]
中起作用。谢谢啊,谢谢你!回想起来很明显,但我想不起来!:)在Python
re
模式中将文本
-
放入字符类时,我添加了一些需要记住的内容。虽然这些信息可以在网上找到,但似乎分散在不同的答案中。
re.split(r"[^\w'/-]+", b)