我正在尝试使用py解译来解析一个字符串。使用下面的代码
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()的理解是,输入(在单个输入的情况下,就像我所做的那样)表示所有可能的字符组合,这些组合将成功地返回匹配。
运行代码
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给出的输出
['(', 'H2', ')']
['(', 'H3', ')']
['(', 'H1', ')']
['(', 'Cl1', ')']
['(', 'H3', ')']我所更改的只是一个额外的外部括号集,以及所需字符串中括号的选项。我不知道为什么第一个程序什么也没有给我,而第二个字符串给我(部分)我想要的。
发布于 2014-01-11 04:47:17
问题在于,从左到右(source)执行的是吡喃解析工作。所以用右括号擦去你在右边寻找的东西。例如:
aSub = '(('+ pyp.Word('()'+pyp.srange('[A-Za-z0-9]')) 返回
['((', 'H2)(C(H3)))']
['((', 'H1)(Cl1))']
['((', '(C(H3))3))']发布于 2014-01-12 23:12:45
正如Paul McGuire的评论所建议的那样,我发现使用nestedExpr是解决我的情况的最佳选择。使用以下代码
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我有一个输出
[[[['H2'], ['C', ['H3']]]], [[['H1'], ['Cl1']]], [[['C', ['H3']], '3']]]这正是我想要的。
https://stackoverflow.com/questions/21057872
复制相似问题