Python 将字符串拆分为多个单词或破折号

Python 将字符串拆分为多个单词或破折号,python,regex,Python,Regex,我正在尝试将一个字符串拆分为多个字符串。我正在使用re库,但遇到了一个问题。假设我的字符串是“Yakima,WA[466012051]49826”,如果我这样做,它将起作用: >>> import re >>> x = "Yakima, WA[4660,12051]49826" >>> re.split('\W+', x) 它会回来的 ['Yakima', 'WA', '4660', '12051', '49826'] 但我现在的问题是,

我正在尝试将一个字符串拆分为多个字符串。我正在使用re库,但遇到了一个问题。假设我的字符串是“Yakima,WA[466012051]49826”,如果我这样做,它将起作用:

>>> import re
>>> x = "Yakima, WA[4660,12051]49826"
>>> re.split('\W+', x)
它会回来的

['Yakima', 'WA', '4660', '12051', '49826']
但我现在的问题是,如果城市中有一个(-)或一个空间,那么如何将城市保持在自己的范围内。我将处理多个城市,有些城市有2到3个工作城市,有些城市有破折号。我需要保留3个数据结构,包括城市和州的组合、坐标和人口

>>> x = "Winston-Salem, NC[3610,8025]131885"
>>> re.split('\W+', x)
['Winston', 'Salem', 'NC', '3610', '8025', '131885']

我想:

['Winston-Salem', 'NC', '3610', '8025', '131885']
['West Palm Beach', 'FL', '2672', '8005', '63305']

您可以尝试按
[
]
进行拆分:

re.split('[,\[\]]', x)
演示:

import re

L = ["Yakima, WA[4660,12051]49826",
"Winston-Salem, NC[3610,8025]131885",
"West Palm Beach, FL[2672,8005]63305"]

for e in L:
    print re.split('[,\[\]]', e)

>>> ['Yakima', ' WA', '4660', '12051', '49826']
>>> ['Winston-Salem', ' NC', '3610', '8025', '131885']
>>> ['West Palm Beach', ' FL', '2672', '8005', '63305']

您可以按
[^\w\s-]+
进行拆分:

>>> x = "Winston-Salem, NC[3610,8025]131885"
>>> re.split('[^\w\s-]+', x)
['Winston-Salem', ' NC', '3610', '8025', '131885']

>>> x = "West Palm Beach, FL[2672,8005]63305"
>>> re.split('[^\w\s-]+', x)
['West Palm Beach', ' FL', '2672', '8005', '63305']
[^\w\s-]+
基本上意味着不是字母数字(
a-zA-Z0-9
),不是空白字符,也不是
-

>>> x = "Winston-Salem, NC[3610,8025]131885"
>>> re.split('[^\w\s-]+', x)
['Winston-Salem', ' NC', '3610', '8025', '131885']

>>> x = "West Palm Beach, FL[2672,8005]63305"
>>> re.split('[^\w\s-]+', x)
['West Palm Beach', ' FL', '2672', '8005', '63305']