这是我正在解析的文本:
x ~ normal(mu, 1)
y ~ normal(mu2, 1)
Run Code Online (Sandbox Code Playgroud)
解析器使用以下方式匹配这些行:
model_definition = Group(identifier.setResultsName('random_variable_name') + '~' + expression).setResultsName('model_definition')
// end of line: .setResultsName('model_definition')
Run Code Online (Sandbox Code Playgroud)
问题是,当有两个模型定义时,它们不会在 ParseResults 对象中单独命名:
看起来第一个被第二个覆盖了。我命名它们的原因是为了使执行这些行变得更容易 - 这样我(希望)不必弄清楚在评估时发生了什么 - 解析器已经标记了所有内容。我如何才能同时标记model_definition这两个标签?model_definition如果能保存找到的每个模型定义的列表,那就太好了。
以防万一,这是我的更多代码:
model_definition = Group(identifier.setResultsName('random_variable_name') + '~' + expression).setResultsName('model_definition')
expression << Or([function_application, number, identifier, list_literal, probability_expression])
statement = Optional(newline) + Or([model_definition, assignment, function_application]) + Optional(newline)
line = OneOrMore('\n').suppress()
comment = Group('#' + SkipTo(newline)).suppress()
program = OneOrMore(Or([line, statement, comment]))
ast = program.parseString(input_string)
return ast
Run Code Online (Sandbox Code Playgroud) 我正在尝试解析来自http://www.apkmirror.com的APK下载页面,例如http://www.apkmirror.com/apk/google-inc/gmail/gmail-7-3-26-152772569-release -release/gmail-7-3-26-152772569-release-android-apk-download/。通常,“APK 详细信息”部分具有以下结构:
我想将“17329196”解析为version_code,“arm”解析为architecture,“com.skype.m2”解析为package。然而,有时, with 行architecture会丢失,如下所示:
到目前为止,使用Scrapy和选择器
apk_details = response.xpath('//*[@title="APK details"]/following-sibling::*[@class="appspec-value"]//text()').extract()
Run Code Online (Sandbox Code Playgroud)
我已经能够提取包含上面显示的“行”的列表。我正在尝试编写一个函数,parse_apk_details以便通过以下测试:
import pytest
def test_parse_apk_details_with_architecture():
apk_details = [u'Version: 3.0.38_ww (4030038)',
u'arm ',
u'Package: com.lenovo.anyshare.gps',
u'\n',
u'2,239 downloads ']
version_code, architecture, package = parse_apk_details(apk_details)
assert version_code == 4030038
assert architecture == "arm"
assert package == "com.lenovo.anyshare.gps"
@pytest.mark.skip(reason="This does not work yet, because 'Package:' is interpreted by the parser as the architecture.")
def test_parse_apk_details_without_architecture():
apk_details …Run Code Online (Sandbox Code Playgroud) 我有一个字符串,可以包含这样的东西:
s = "'Mark, Bob','John'"
Run Code Online (Sandbox Code Playgroud)
解析为3个字符串的最佳方法是什么?我对pyparsing很新,我担心我不太了解它
(编辑)对不起,我不是很清楚.这是使用语法和pyparsing来解析文件的程序的一部分.这是输入的一小部分,我不知道该怎么做.这应该真正代表一个由三个名字组成的数组,这就是我想要从中得到的.
谢谢
我想在Python中使用一个函数将字符串命令转换为AST(抽象语法树).
该命令的语法如下:
commandName(3, "hello", 5.0, x::int)
Run Code Online (Sandbox Code Playgroud)
命令可以接受任意数量的逗号分隔值
假设函数被调用convert_to_ast,那么
convert_to_ast('commandName(3, "hello", 5.0, x::int)')
Run Code Online (Sandbox Code Playgroud)
应该产生以下AST:
{
'type': 'command',
'name': 'commandName',
'args': [{
'type': 'int',
'value': 3
}, {
'type': 'str',
'value': 'Hello'
}, {
'type': 'float',
'value': 5.0
}, {
'type': 'var',
'kind': 'int',
'name': 'x
}]
Run Code Online (Sandbox Code Playgroud)