2016-03-04 24 views
1

我想綁在每一組人物在我的案例解析一些文本成碎片字符組將是「*((」和「))」Python的 - 由字符組

import re 
file = "Name* ((Bla Bla Bla (Bla Bla) A40 & A41)) Name2* ((Bla Bla Bla (Bla Bla) A42 & A43)) Name3* ((Bla Bla Bla (Bla Bla) A44 & A45)) Name4* ((Bla Bla Bla (Bla Bla) A46 & A47)) Name5* ((Bla Bla Bla (Bla Bla) A48 & A49)) Name6* ((Bla Bla Bla (Bla Bla) A50 & A51)) Name7* ((Bla Bla Bla (Bla Bla) A452 & A53)) Name8* ((Bla Bla Bla (Bla Bla) A54 & A55)) Name9* ((Bla Bla Bla (Bla Bla) A56 & A57)) Name10* ((Bla Bla Bla (Bla Bla) A58 & A59)) Name11* ((Bla Bla Bla (Bla Bla) A60 & A61)) Name12* ((Bla Bla Bla (Bla Bla) A62 & A63)) Name13* ((Bla Bla Bla (Bla Bla) A64 & A65)) Name14* ((Bla Bla Bla (Bla Bla) A66 & A67)) Name14* ((Bla Bla Bla (Bla Bla) A68 & A69))" 
parse = re.split('[* ((][)) ]', file) 
print parse 
spilled文本

我的結果返回爲:

['Name', '((Bla Bla Bla (Bla Bla) A40 & A41)) Name2', '((Bla Bla Bla (Bla Bla) A42 & A43)) Name3', '((Bla Bla Bla (Bla Bla) A44 & A45)) Name4', '((Bla Bla Bla (Bla Bla) A46 & A47)) Name5', '((Bla Bla Bla (Bla Bla) A48 & A49)) Name6', '((Bla Bla Bla (Bla Bla) A50 & A51)) Name7', '((Bla Bla Bla (Bla Bla) A452 & A53)) Name8', '((Bla Bla Bla (Bla Bla) A54 & A55)) Name9', '((Bla Bla Bla (Bla Bla) A56 & A57)) Name10', '((Bla Bla Bla (Bla Bla) A58 & A59)) Name11', '((Bla Bla Bla (Bla Bla) A60 & A61)) Name12', '((Bla Bla Bla (Bla Bla) A62 & A63)) Name13', '((Bla Bla Bla (Bla Bla) A64 & A65)) Name14', '((Bla Bla Bla (Bla Bla) A66 & A67)) Name14', '((Bla Bla Bla (Bla Bla) A68 & A69))'] 

它似乎只是將文本拆分爲「*」。我似乎無法弄清楚如何設置多個多字符分隔符。任何人有任何建議?謝謝。

+0

你究竟想要拆分什麼?你也確定你不想findall? –

+0

我試圖在每個「*((」和「))」分割。我真的不知道如果findall是我想要的。文本本質上是在一個表格的一個單元格中,我試圖將它解析爲單獨的單元格和字段。 – user1457123

+2

你想保留((和))嗎?你想要像're.split('\ * \ s + \(\(| \)\)',file)' –

回答

-1

你可以使用字符串分割函數嗎?這和一些列表解析將完成這項工作。

In[31]: [i for s in [s.split(')) ') for s in file.split('* ((')] for i in s] 
Out[31]: 
['Name', 
'Bla Bla Bla (Bla Bla) A40 & A41', 
'Name2', 
'Bla Bla Bla (Bla Bla) A42 & A43', 
'Name3', 
'Bla Bla Bla (Bla Bla) A44 & A45', 
'Name4', 
'Bla Bla Bla (Bla Bla) A46 & A47', 
'Name5', 
'Bla Bla Bla (Bla Bla) A48 & A49', 
'Name6', 
'Bla Bla Bla (Bla Bla) A50 & A51', 
'Name7', 
'Bla Bla Bla (Bla Bla) A452 & A53', 
'Name8', 
'Bla Bla Bla (Bla Bla) A54 & A55', 
'Name9', 
'Bla Bla Bla (Bla Bla) A56 & A57', 
'Name10', 
'Bla Bla Bla (Bla Bla) A58 & A59', 
'Name11', 
'Bla Bla Bla (Bla Bla) A60 & A61', 
'Name12', 
'Bla Bla Bla (Bla Bla) A62 & A63', 
'Name13', 
'Bla Bla Bla (Bla Bla) A64 & A65', 
'Name14', 
'Bla Bla Bla (Bla Bla) A66 & A67', 
'Name14', 
'Bla Bla Bla (Bla Bla) A68 & A69))'] 
+0

感謝您的建議拉夫。我認爲Padraic的回答讓我滿意。我感謝所有的幫助 – user1457123

+0

Raf,看起來我終於有機會回到這個了。請問這個問題,請原諒我缺乏經驗。 「我」和「S」代表什麼? 「s」是否等同於「字符串」?就像我說的,我很喜歡綠色的變量,等等。 – user1457123

+0

@ user1457123嗨,沒問題。這只是一個扁平列表的方式。看看這裏。 [http://stackoverflow.com/a/952952/5069105] – Raf

0

我想嘗試以下的正則表達式

import re 
file = "your....string.... content" #your string goes here. 

parse = re.split(r"\*|\)\)|\(\(", file) 

OUTPUT:

[ '姓名', '', '唧唧歪歪(BLA BLA)A40 A41 &',「名稱2','','Bla Bla Bla(Bla Bla)A42 & A43','Name3','','Bla Bla Bla(Bla Bla)A44 & A45','Name4',''Bla Bla Bla (Bla Bla)A46 & A47','Name5','','Bla Bla Bla(Bla Bla) A48 & A49','Name6','','Bla Bla Bla(Bla Bla)A50 & A51','Name7','','Bla Bla Bla(Bla Bla)A452 & A53','Name8',' ','Bla Bla Bla(Bla Bla)A54 & A55','Name9','','Bla Bla Bla(Bla Bla)A56 & A57','Name10','','Bla Bla Bla(Bla Bla) A58 & A59','Name11','','Bla Bla Bla(Bla Bla)A60 & A61','Name12','','Bla Bla Bla(Bla Bla)A62 & A63','Name13',' ','Bla Bla Bla(Bla Bla)A64 & A65','Name14','','Bla Bla Bla(Bla Bla)A66 & A67','Name14','','Bla Bla Bla(Bla Bla) A68 & A69','']

+0

這真的只是增加了比我在評論中提出的更多的空白字符串,否則它是相同的 –

+0

哦,我可能錯過了你的評論我同意有更多的空間和它的自然基於OP需求 – Saleem

0

我想分享我最終使用的解決方案,以防其他人受益。在那裏有一個正則表達式的混合,但我用findall而不是split。現在我已經有了這麼多,我必須考慮更多地控制輸出。數據被轉儲到3個字段(From_Node,To_Node,Link)。我需要第一個「To_Node」的值成爲下一行「From_Node」的值,依此類推。想象一下沿着一條線,點A到B,然後點B到C,然後點C到D,等等......用我有限的知識,我甚至不知道從哪裏開始尋找這個解決方案。有任何想法嗎?

import re, arcpy 

# Local variables: 
Table1 = "D:\Database1.mdb\\Table1" 
RAW_Data = "D:\Database1.mdb\RAW_Data" 

#Create Cursors and Insert Rows 
insertcursor = arcpy.da.InsertCursor(Table1, ["From_Node", "To_Node", "Link"]) 
with arcpy.da.SearchCursor(RAW_Data, ["Field1", "Field1", "Field1"]) as searchcursor: 
    try: 
     for row in searchcursor: 
      listFrom_Node = re.findall('\w+(?=\*\s*)', row[0]) #From Node 
      print listFrom_Node 
      print "From Node List Success" 
      listTo_Node = re.findall('\w+(?=\*\s*)', row[1]) #To Node 
      print listTo_Node 
      print "To Node List Success" 
      listLink = re.findall('\(\((.*?)\)\)', row[2]) #Link descriptions 
      print listLink 
      print "Link List Success" 
      for n,Value in enumerate(listFrom_Node): 
       insertcursor.insertRow((listFrom_Node[n], listTo_Node[n], listLink[n])) 
    except: 
     print ('Empty Cursor')