我的問題是對this one的變化。我似乎無法弄清楚這一點。Python:按模式分割字符串
given = "{abc, xyz}, 123, {def, lmn, ijk}, {uvw}, opq"
expected = ["{abc, xyz}", "123", "{def, lmn, ijk}", "{uvw}", "opq"]
如在上面的例子中,在expected
的項目可能是一個或{..., ...}
只是另一個string
。
非常感謝提前。
我的問題是對this one的變化。我似乎無法弄清楚這一點。Python:按模式分割字符串
given = "{abc, xyz}, 123, {def, lmn, ijk}, {uvw}, opq"
expected = ["{abc, xyz}", "123", "{def, lmn, ijk}", "{uvw}", "opq"]
如在上面的例子中,在expected
的項目可能是一個或{..., ...}
只是另一個string
。
非常感謝提前。
我認爲下面的正則表達式適合這份工作。 Howevever你不必嵌套的花括號
>>> s= "{abc, xyz}, 123, {def, lmn, ijk}, {uvw}, opq"
>>> re.findall(r",?\s*(\{.*?\}|[^,]+)",s)
['{abc, xyz}', '123', '{def, lmn, ijk}', '{uvw}', 'opq']
以下是否不能爲您提供您要查找的內容?
import re
given = "{abc, xyz}, 123, {def, lmn, ijk}, {uvw}, opq"
expected = re.findall(r'(\w+)', given)
我跑在終端並獲得:
>>> import re
>>> given = "{abc, xyz}, 123, {def, lmn, ijk}, {uvw}, opq"
>>> expected = re.findall(r'(\w+)', given)
>>> expected
['abc', 'xyz', '123', 'def', 'lmn', 'ijk', 'uvw', 'opq']
這並非如此,例如,如果它們位於同一組括號內,則'abc'和'xyz'不應該是單獨的單詞。 –
您可以使用正則表達式如下做到這一點(嵌套的花括號不能使用正則表達式,據我知道解析)。其餘部分與您提供的類似鏈接相同。
given = "{abc, xyz}, 123, {def, lmn, ijk}, {uvw}, opq"
regex = r",?\s*(\{.*?\}|[^,]+)"
print re.findall(regex,given)
OP: ['{abc, xyz}', '123', '{def, lmn, ijk}', '{uvw}', 'opq']
只需導入re
模塊。並按照鏈接說的做。 它將匹配花括號裏的任何東西{
}
和任何字符串。
你需要re.findall某處你所擁有的只是一個元組 –
他已經給出瞭解釋其餘的鏈接。不是嗎 –
given = "{abc,{a:b}, xyz} , 123 , {def, lmn, ijk}, {uvw}, opq"
#expected = ["{abc, xyz}", "123", "{def, lmn, ijk}", "{uvw}", "opq"]
tmp_l = given.split(',')
tmp_l = [i.strip() for i in tmp_l]
result_l = []
element = ''
count = 0
for i in tmp_l:
if i[0] == '{':
count += 1
if i[-1] == '}':
count -= 1
element = element + i + ','
if count == 0:
element = element[0:-1]
result_l.append(element)
element = ''
print str(result_l)
這一個可以處理嵌套的花括號,雖然看起來不是那麼優雅..
如果花括號可以嵌套,你不能使用常規表達式(拆分它至少不會在其「純「形式),因爲它不是一個上下文無關的語法。 – shx2