首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >找不到pyparsing解析所需的字符串

找不到pyparsing解析所需的字符串
EN

Stack Overflow用户
提问于 2014-01-11 02:33:07
回答 2查看 166关注 0票数 4

我正在尝试使用py解译来解析一个字符串。使用下面的代码

代码语言:javascript
复制
import pyparsing as pyp

aString = "C((H2)(C(H3))) C((H1)(Cl1)) C(((C(H3))3))"

aSub = '(('+ pyp.Word('()'+pyp.srange('[A-Za-z0-9]'))+'))'
substituent = aSub('sub')

for t,s,e in substituent.scanString(aString):
    print t.sub

我没有输出。然而,在字符串aString = "C((H2)(C(H3))) C((H1)(Cl1)) C(((C(H3))3))"中有((stuff))的多次出现--特别是((H2)(C(H3)))C((H1)(Cl1))C(((C(H3))3))

我对Word()的理解是,输入(在单个输入的情况下,就像我所做的那样)表示所有可能的字符组合,这些组合将成功地返回匹配。

运行代码

代码语言:javascript
复制
import pyparsing as pyp

aString = "C((H2)(C(H3))) C((H1)(Cl1)) C(((C(H3))3))"

aSub = '(' + pyp.Word(pyp.srange('[A-Za-z0-9]'))+')'
substituent = aSub('sub')

for t,s,e in substituent.scanString(aString):
    print t.sub

给出的输出

代码语言:javascript
复制
['(', 'H2', ')']
['(', 'H3', ')']
['(', 'H1', ')']
['(', 'Cl1', ')']
['(', 'H3', ')']

我所更改的只是一个额外的外部括号集,以及所需字符串中括号的选项。我不知道为什么第一个程序什么也没有给我,而第二个字符串给我(部分)我想要的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-11 04:47:17

问题在于,从左到右(source)执行的是吡喃解析工作。所以用右括号擦去你在右边寻找的东西。例如:

代码语言:javascript
复制
aSub = '(('+ pyp.Word('()'+pyp.srange('[A-Za-z0-9]')) 

返回

代码语言:javascript
复制
['((', 'H2)(C(H3)))']
['((', 'H1)(Cl1))']
['((', '(C(H3))3))']
票数 2
EN

Stack Overflow用户

发布于 2014-01-12 23:12:45

正如Paul McGuire的评论所建议的那样,我发现使用nestedExpr是解决我的情况的最佳选择。使用以下代码

代码语言:javascript
复制
import pyparsing as pyp

aString = "C((H2)(C(H3))) C((H1)(Cl1)) C((C(H3))3)"
aList = aString.split()

for i in range(len(aList)):
    aList[i] = [pyp.nestedExpr().parseString(aList[i][1:]).asList()[0]]

print aList

我有一个输出

代码语言:javascript
复制
[[[['H2'], ['C', ['H3']]]], [[['H1'], ['Cl1']]], [[['C', ['H3']], '3']]]

这正是我想要的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21057872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档