2016-03-04 43 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')