ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python Pyparsing:在括号内捕获以逗号分隔的列表,忽略内部括号

2019-07-06 02:56:16  阅读:214  来源: 互联网

标签:python regex parsing string pyparsing


我有一个关于如何正确解析字符串的问题,如下所示,

"(test.function, arr(3,12), "combine,into one")"

进入以下列表,

['test.function', 'arr(3,12)', '"combine,into one"']

注意:原始字符串中的“列表”项不一定用逗号和空格分隔,它也可以是一个接一个地用逗号直接分割的两个项,例如: test.function,ARR(3,12).

基本上,我想:

>解析括号中包含的输入字符串,但不包括内括号. (因此,nestedExpr()不能按原样使用)
>里面的项目用逗号分隔,但项目本身可能包含逗号.

而且,我只能使用scanString()而不能使用parseString().

我在SO中进行了一些搜索并找到了thisthis,但我无法翻译它们以适应我的问题.

谢谢!

解决方法:

这应该解决您的嵌套和引用问题:

sample = """(test.function, arr(3,12),"combine,into one")"""

from pyparsing import (Suppress, removeQuotes, quotedString, originalTextFor, 
    OneOrMore, Word, printables, nestedExpr, delimitedList)

# punctuation and basic elements
LPAR,RPAR = map(Suppress, "()")
quotedString.addParseAction(removeQuotes)

# what are the possible values inside the ()'s?
# - quoted string - anything is allowed inside quotes, match these first
# - any printable, not containing ',', '(', or ')', with optional nested ()'s
#   (use originalTextFor helper to extract the original text from the input
#   string)
value = (quotedString 
         | originalTextFor(OneOrMore(Word(printables, excludeChars="(),") 
                                     | nestedExpr())))

# define an overall expression, with surrounding ()'s
expr = LPAR + delimitedList(value) + RPAR

# test against the sample
print(expr.parseString(sample).asList())

打印:

['test.function', 'arr(3,12)', 'combine,into one']

标签:python,regex,parsing,string,pyparsing
来源: https://codeday.me/bug/20190706/1393227.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有