python - 找不到 pyparsing 预期的字符串

标签 python string parsing python-2.7 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 从左到右工作 (source)。因此,使用正确的括号会删除您在右侧搜索的内容。例如:

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

返回

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

关于python - 找不到 pyparsing 预期的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21057872/

相关文章:

python - 将三个 Pandas 数据框合二为一?

c++ - ostringstream 给了我隐式实例化错误

javascript - 在 Webkit 中使用 JavaScript 解析本地 JSON 文件

python - `strip` ing 在 python 中拆分的结果

c++ - g++ __FUNCTION__ 替换时间

python - 在Python中从<html>正文中将数据提取到Excel文件

python - 在Python中实现点类

python - 获取作为 *args 和 **kwargs 传递的值的名称

python - 使用 pip 找不到 TensorFlow

objective-c - 我可以做一个简单的初始化字符串格式使用@"