我有以下
str = '[5.955894, 45.817792], [10.49238, 45.817792], [10.49238, 47.808381], [5.955894, 47.808381]'
我想拆分它,以便我有一个像
这样的字符串数组 ['[5.955894, 45.817792]', '[10.49238, 45.817792]', ...]
因此[...]对象是数组的元素。包含[和]包含在内是很重要的。我到目前为止:
re.split('\D,\s\D', str)
但这给了我:
['[5.955894, 45.817792', '10.49238, 45.817792', '10.49238, 47.808381', '5.955894, 47.808381]']
不是我想要的。
答案 0 :(得分:8)
我更喜欢使用re.findall
并指定我想要的内容,而不是尝试描述re.split
的分隔符
>>> s = '[5.955894, 45.817792], [10.49238, 45.817792], [10.49238, 47.808381], [5.955894, 47.808381]'
>>> re.findall(r"\[[^\]]*\]",s)
['[5.955894, 45.817792]', '[10.49238, 45.817792]', '[10.49238, 47.808381]', '[5.955894, 47.808381]']
\[
匹配[[^\]]*
匹配除了\]
匹配] 答案 1 :(得分:3)
您需要将re.split
与预见一起使用:
>>> s = '[5.955894, 45.817792], [10.49238, 45.817792], [10.49238, 47.808381], [5.955894, 47.808381]'
>>> re.split(",[ ]*(?=\[)", s)
['[5.955894, 45.817792]', '[10.49238, 45.817792]', '[10.49238, 47.808381]', '[5.955894, 47.808381]']
不要将str
用作变量。这是内置的阴影。
以下模式:
,[ ]*(?=\[)
将匹配comma(,)
和一些空格,后跟[
您甚至可以使用look-behind
执行此操作。因此,(?<=\]),[ ]*
也可以。
答案 2 :(得分:0)
这是我写的一个天真的程序,我认为它解决了你的问题,但不是最好的。
>>>def split_string(strg, begin = '[', end = ']'):
myList = []
string = ''
for char in strg:
if char == begin:
string = ''
string += char
if char == end:
myList.append(string)
return myList
>>>strg = '[5.955894, 45.817792], [10.49238, 45.817792], [10.49238, 47.808381], [5.955894, 47.808381]'
>>>split_string(strg)
['[5.955894, 45.817792]', '[10.49238, 45.817792]', '[10.49238, 47.808381]', '[5.955894, 47.808381]']
答案 3 :(得分:0)
继续@nhahtdh评论。
取决于您的信任问题。
In [510]: txt = '[5.955894, 45.817792], [10.49238, 45.817792], [10.49238, 47.808381], [5.955894, 47.808381]'
In [511]: lst = eval ("[%s]" % txt)
In [512]: [str(x) for x in lst]
Out[512]:
['[5.955894, 45.817792]',
'[10.49238, 45.817792]',
'[10.49238, 47.808381]',
'[5.955894, 47.808381]']