Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-按字符组拆分的文本_Python_Regex_Split - Fatal编程技术网

Python-按字符组拆分的文本

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)

我试图在每一组字符中将一些文本解析成片段,在我的例子中,字符组将是“*((((“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)) 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')