簡體   English   中英

沒有找到pyparsing預期的字符串

[英]Not finding the strings expected with pyparsing

我正在嘗試使用pyparsing解析一個字符串。 使用下面的代碼

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', ')']

所有我改變的是一組額外的括號,以及字符串內部括號的選項,所需的字符串具有。 我不確定為什么第一個程序什么都沒給我,而第二個字符串給了我(部分)我想要的東西。

問題是從左到右( )的pyparsing工作。 因此,使用右括號會刪除您在右側搜索的內容。 例如:

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

回報

['((', 'H2)(C(H3)))']
['((', 'H1)(Cl1))']
['((', '(C(H3))3))']

正如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']]]

這正是我想要的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM