Python-按字符组拆分的文本
我试图在每一组字符中将一些文本解析成片段,在我的例子中,字符组将是“*((((“and”)” 我的结果如下:Python-按字符组拆分的文本,python,regex,split,Python,Regex,Split,我试图在每一组字符中将一些文本解析成片段,在我的例子中,字符组将是“*((((“and”)” 我的结果如下: ['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)
['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))']
它似乎只是在“*”处拆分文本。我似乎不知道如何设置多个多字符分隔符。有人有什么建议吗?谢谢。您可以对字符串使用拆分函数吗?这和一些列表理解就可以了
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))']
我想试试看正则表达式
import re
file = "your....string.... content" #your string goes here.
parse = re.split(r"\*|\)\)|\(\(", file)
输出:
【名称】、‘blablablabla(blabla-Bla)A40和A41’、‘名称2’、‘blablabla(Bla-Bla)A42和A43’、‘名称3’、‘blabla-Bla(Bla-Bla)A44和A45’、‘名称4’、‘Bla-Bla(Bla-Bla)A46和A47’、‘名称5’、‘Bla-Bla-Bla(Bla-Bla-Bla)A48和A49’、‘名称6’、‘Bla-Bla-Bla(Bla-Bla-Bla-Bla)A50和A51’、‘Bla-Bla’、‘Bla’、‘Bla’、‘Bla’、‘Bla’、‘Bla’、‘Bla’、‘Bla’A452和A53、Name8、Name9、Name10、Name11、Name11、Name11、BlablaBla(Bla Bla Bla)A60和A61、Name12、Blabla Bla Bla(Bla Bla Bla Bla)A62和A63、Name13、Bla Bla Bla(Bla Bla Bla Bla)A64和A61(blabla-Bla)A66和A67,“名称14”,“Bla-Bla-Bla(Bla-Bla)A68和A69”,“等等]
我想分享我最终使用的解决方案,以防其他人受益。其中混合了regex,但我使用了findall而不是split。现在我已经做到了这一点,我必须进一步研究如何控制输出。数据转储到3个字段(从_节点、到_节点、链接)。我需要第一个“到_节点”的值成为下一行“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')
你到底想拆分什么?你确定你不想拆分findall吗?我正在尝试拆分每个“*((((“and”)”)。我真的不知道findall是否是我想要的。文本基本上是在表的一个单元格中,我正试图将其解析为单独的单元格和字段。你想保留((and))吗还是不?你想要类似于
re.split('\*\s+\(\(\(\\\)\),file)
的东西,它可以完美地工作。它可以删除((和))。谢谢Padraic:)我还需要处理很多文本,但这可以让我通过解析部分。不用担心,如果有效,您可以将其添加为答案并获得一些代表。您可能还需要过滤它返回的内容,例如列表(过滤器(无,(x.strip()代表re.split中的x)('\*\s+\(\(\(|\)\)\),file))
,而且如果这是来自一个文件,您实际上可以在没有正则表达式的情况下进行过滤,这对于建议Raf来说非常容易。我想Padraic的回答能满足我的需要。我感谢所有的帮助,看起来我终于有机会回到这个话题上来了。请原谅我问这个问题时缺乏经验。“i”和“s”代表什么?“s”等于“string”吗?就像我说的,我对变量的REAGRD非常熟悉,等等@user1457123嗨,没问题。这只是一种将列表展平的方法。看看这里。[所以“i”=“item”和“s”=“sublist”?这很有意义。所以现在我必须弄清楚如何将解析后的数据插入表中的某些字段。例如,一个字段中的“Name…”和“Bla Bla Bla(Bla…)在另一个例子中。我目前正在将所有输出值转储到一个字段中。关于如何将数据流量定向到我想要的位置,有什么建议吗?这实际上只是添加了比我在注释中建议的更多的纯空白字符串,否则它是相同的,我可能会错过您的注释。我同意有更多的空格及其nat基于OP需求的ural
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')