我们如何在字符串中找到引号的结尾

大家好,
假设我有一个字符串,其中包含引号 -
单句和双引号互换 -
S =" A1'B1" C1'D1'C2" B2'A2"
我需要从B1开始,然后以B2结束 - 即我必须解析
从内部s的单引号.
有没有现有的字符串报价解析器,我可以使用或
我应该自己写解析器吗?
如果有人可以帮助我,我将是很多义务.
问候
kr/ \/

# 回答1


2008年8月31日在阳光下07:29:26 -0700(PDT),ra*********@gmail.com写道:
文件" ",第1行
S =" A1'B1" C1'D1'C2" B2'A2"
^
语法:语法无效
为您的需求编写一个小解析器应该不会那么困难.
在某种程度上,您可以使用正则表达式:
['" C1 \'D1 \'C2"']
['\'b1" c1 \'','\'c2" b2 \'']
但这在所有情况下都不会起作用.您可以在此处阅读更多:http://www.gnosis.cx/tpip/
- -
问候,
wojtek walczak,http://tosh.pl/gminick/
# 回答2


在2008-08-31,ra hydeighte@gmail.com 在这种情况下,您可以使用分裂和加入的组合.
#用单个报价作为隔离器来拆分字符串是子字符串的列表
ls = s.split("'")
#remove第一个和最后一句报价之前发生了什么
LS = LS [1:-1]
#Reaseles在最外面的单引号之间汇总字符串.
s ="'" .join(ls)
#如果您愿意
s = s.strip()
- -
Antoon Pardon
# 回答3


8月31日,9:29*am,rajmoha ...@gmail.com写道:
pyparsing定义了一种辅助方法,称为NestedExpr-通常是
用于查找()或[]等的嵌套,但我很感兴趣
看看我是否可以使用NestedExpr匹配Nested()'s,[]'s和{}
在同一字符串中(就像我们过去在代数类中所做的一样
比Parens更高的水平嵌套 - 类似于" {[A + 3*(B -C)]
+ 7}" - 也就是说,()在[] s中的巢和{} s)内的[] nest.
这是可能的,但是它使用了一些高级爆炸方法.我
调整了此示例以映射到您的案件 - 这要简单得多,就像
"" s在's中的巢和's nest''s.我仍然留一大堆
以前的筑巢,但我不确定这是绝对必要的.
这是您的示例的工作代码:
从pyparsing进口,单一,nomatch,文字,charsnotin,
NestedExpr
#定义前进的特殊子类,保存以前包含
#堆栈中的表达式
班级前扇区(前向):
def __init __(自我):
超级(前向堆栈,self).__ init __()
self.exprstack = []
self << nmatch()
def __lshift __(self,expr):
self.exprstack.append(self.expr)
超级(前向堆栈,self).__ lshift __(expr)
返回自我
def pop(self):
self.expr = self.exprstack.pop()
#定义语法
开放= forwardstack()
关闭= forwardstack()
打开<<一个(["'",'""])
关闭<< nmatch()
MatchedNesting = NestedExpr(打开,关闭,charsnotin('\'"''),,
imploreexpr =无)
#定义Parse时间回调
备用= {'"':"'"","':'"''}
DEF下端(T):
#关闭表达应匹配 当前的开头报价char 关闭<<字面(t [0]) #如果我们找到其他开头报价char,那是 #嵌套的报价 打开<<文字(替代[t [0]]) def popclosing(): clos.pop() open.pop() #当这些表达式匹配时,将调用解析操作 open.setparseaction(下端) closing.setparseaction(popclosing) #解析测试字符串 s ="""" a1'b1" c1'd1'c2" b2'a2"""" print匹配nesting.parsestring(s)[0] 印刷: ['a1',['b1',['c1',['d1'],'c2'],'b2'],'a2'] - 保罗

标签: python

添加新评论