[英]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.