2

私は次のものを持っています

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

本当に欲しいものではありません。

4

4 に答える 4

9

区切り文字を説明しようとするよりも、必要なものを使用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. \[[
  2. [^\]]*] 以外にマッチ
  3. \]マッチ]
于 2013-02-11T14:36:58.937 に答える
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。したがって、(?<=\]),[ ]*動作します。

于 2013-02-11T14:37:08.327 に答える
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]']
于 2013-02-11T15:03:12.447 に答える
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]']
于 2013-02-11T15:31:18.477 に答える