对于我使用matplotlib的大多数交互式绘图,我不想使用数学的乳胶处理.(主要是因为它太慢了,但也因为它经常使用IMHO只是有点太模糊.)但是我在编写乳胶时也一直使用我自己的宏.仅作为一个例子,而不是做$M_{\odot}$我定义的事情$\Msun$.因此,当使用matplotlib时,我倾向于自动编写后者,然后得到错误并且必须修复它.这只是一个特别简单的例子,我希望能够灵活地在我的论文和我的情节中重新定义一个宏,而不需要太多的工作.
那么,是否有任何合理的方法可以扩展mathtext解析器以理解类似的东西$\Msun$?或者我是否必须破解mathtext.py或其他什么?
(我的后备是定义Msun为字符串,r'M_{\odot}'所以我可以写出类似的东西r'$M = 10\,' + Msun + '$',但这是令人不愉快的,当然对我来说不会更自动.)
我有一个类似于的文本文件;
节标题1:
有些单词可以是任何
更多单词可以是任何东西
等等lala其他一些标题:
像以前一样可能是任何
嘿,这不是很有趣
我正在尝试用pyparser构造一个语法,当要求将解析结果作为列表时,这将导致以下列表结构; (IE;在遍历parsed.asList()元素时应该打印以下内容)
['节目标题1:',[['某些单词可以是任何内容'],['更多单词可以是任何内容'],['etc etc lala']]]
['其他标题:',[[ '就像之前可能是任何事情',['嘿,这不是很有趣']]]
标题名称都是事先已知的,并且可能会出现或不出现各个标题.如果它们确实出现,则始终至少有一行内容.
我遇到的问题是,我无法解析解析器以识别'section header 1:'ands和'some other header:'的开始位置.我最终看到了一个parsed.asList();
['节目标题1:',[[''某些单词可以是任何'],['更多单词可以是任何东西'],['etc etc lala'],['其他标题'],[' '就像之前可能是任何事情',['嘿,这不是很有趣']]]
(IE:节标题1:正确看到,但是跟随它的每一个都被添加到节标题1中,包括更多标题行等等.)
我尝试了各种各样的东西,以各种方式使用leaveWhitespace()和LineEnd(),但我无法弄清楚.
我正在讨厌的基本解析器是(人为的例子 - 实际上这是一个类定义等等.).
header_1_line=Literal('section header 1:')
text_line=Group(OneOrMore(Word(printables)))
header_1_block=Group(header_1_line+Group(OneOrMore(text_line)))
header_2_line=Literal('some other header:')
header_2_block=Group(header_2_line+Group(OneOrMore(text_line)))
overall_structure=ZeroOrMore(header_1_block|header_2_block)
Run Code Online (Sandbox Code Playgroud)
正在被召唤
parsed=overall_structure.parseFile()
Run Code Online (Sandbox Code Playgroud)
干杯,马特.
我正在尝试使用pyparsing以下形式解析函数调用:
f(x, y)
Run Code Online (Sandbox Code Playgroud)
这很简单.但由于它是一个递归下降的解析器,它也应该很容易解析:
f(g(x), y)
Run Code Online (Sandbox Code Playgroud)
这是我无法得到的.这是一个煮沸的例子:
from pyparsing import Forward, Word, alphas, alphanums, nums, ZeroOrMore, Literal
lparen = Literal("(")
rparen = Literal(")")
identifier = Word(alphas, alphanums + "_")
integer = Word( nums )
functor = identifier
# allow expression to be used recursively
expression = Forward()
arg = identifier | integer | expression
args = arg + ZeroOrMore("," + arg)
expression << functor + lparen + args + rparen
print expression.parseString("f(x, y)")
print expression.parseString("f(g(x), y)")
Run Code Online (Sandbox Code Playgroud)
这是输出:
['f', …Run Code Online (Sandbox Code Playgroud) 如何使用正则表达式(或pyparsing更好?)来描述下面提供的脚本语言(Backus-Naur Form):
<root> := <tree> | <leaves>
<tree> := <group> [* <group>]
<group> := "{" <leaves> "}" | <leaf>;
<leaves> := {<leaf>;} leaf
<leaf> := <name> = <expression>{;}
<name> := <string_without_spaces_and_tabs>
<expression> := <string_without_spaces_and_tabs>
Run Code Online (Sandbox Code Playgroud)
脚本示例:
{
stage = 3;
some.param1 = [10, 20];
} *
{
stage = 4;
param3 = [100,150,200,250,300]
} *
endparam = [0, 1]
Run Code Online (Sandbox Code Playgroud)
我使用python re.compile并希望将所有内容分组,如下所示:
[ [ 'stage', '3'],
[ 'some.param1', '[10, 20]'] ],
[ ['stage', '4'],
['param3', '[100,150,200,250,300]'] ],
[ ['endparam', '[0, 1]'] ] …Run Code Online (Sandbox Code Playgroud) 使用pyparsing模块解析Snort日志时遇到问题.
问题在于分离Snort日志(它有多行条目,用空行分隔)和获取pyparsing来解析每个条目作为整个块,而不是逐行读取并期望语法适用于每一行(显然, 它不是.)
我已经尝试将每个块转换为临时字符串,剥离每个块内的换行符,但它拒绝正确处理.我可能完全走错了路,但我不这么认为(类似的形式适用于syslog类型的日志,但这些是单行条目,因此适合你的基本文件迭代器/行处理)
这是一个日志示例和我到目前为止的代码:
[**] [1:486:4] ICMP Destination Unreachable Communication with Destination Host is Administratively Prohibited [**]
[Classification: Misc activity] [Priority: 3]
08/03-07:30:02.233350 172.143.241.86 -> 63.44.2.33
ICMP TTL:61 TOS:0xC0 ID:49461 IpLen:20 DgmLen:88
Type:3 Code:10 DESTINATION UNREACHABLE: ADMINISTRATIVELY PROHIBITED HOST FILTERED
** ORIGINAL DATAGRAM DUMP:
63.44.2.33:41235 -> 172.143.241.86:4949
TCP TTL:61 TOS:0x0 ID:36212 IpLen:20 DgmLen:60 DF
Seq: 0xF74E606
(32 more bytes of original packet)
** END OF DUMP
[**] ...more like this [**]
Run Code Online (Sandbox Code Playgroud)
更新的代码:
def snort_parse(logfile):
header = Suppress("[**] [") + …Run Code Online (Sandbox Code Playgroud) 这是我第一次尝试使用pyparsing,我想问一下如何过滤这个样本行:
survey = '''GPS,PN1,LA52.125133215643,LN21.031048525561,EL116.898812'''
Run Code Online (Sandbox Code Playgroud)
获得如下输出:1,52.125133215643,21.031048525561,116.898812
一般来说,我有理解pyparsing逻辑的问题,所以对这个例子的任何帮助将不胜感激.谢谢
我刚刚开始,pyparsing我遇到了换行问题.
我的语法是:
from pyparsing import *
newline = LineEnd () #Literal ('\n').leaveWhitespace ()
minus = Literal ('-')
plus = Literal ('+')
lparen = Literal ('(')
rparen = Literal (')')
ident = Word (alphas)
integer = Word (nums)
arith = Forward ()
parenthized = Group (lparen + arith + rparen)
atom = ident | integer | parenthized
factor = ZeroOrMore (minus | plus) + atom
arith << (ZeroOrMore (factor + (minus | plus) ) + factor)
statement = arith …Run Code Online (Sandbox Code Playgroud) Pyparsing对于非常小的语法工作得很好,但随着语法的增长,性能下降并且通过屋顶使用内存.
我目前的gramar是:
newline = LineEnd ()
minus = Literal ('-')
plus = Literal ('+')
star = Literal ('*')
dash = Literal ('/')
dashdash = Literal ('//')
percent = Literal ('%')
starstar = Literal ('**')
lparen = Literal ('(')
rparen = Literal (')')
dot = Literal ('.')
comma = Literal (',')
eq = Literal ('=')
eqeq = Literal ('==')
lt = Literal ('<')
gt = Literal ('>')
le = Literal ('<=')
ge = Literal ('>=')
not_ = Keyword ('not')
and_ = …Run Code Online (Sandbox Code Playgroud) 我正在努力用PyParsing解析嵌套结构.我已经搜索了许多PyParsing的'嵌套'示例用法,但我没有看到如何解决我的问题.
这是我的内部结构:
texture_unit optionalName
{
texture required_val
prop_name1 prop_val1
prop_name2 prop_val1
}
Run Code Online (Sandbox Code Playgroud)
这是我的外部结构的样子,但它可以包含零个或多个内部结构.
pass optionalName
{
prop_name1 prop_val1
prop_name2 prop_val1
texture_unit optionalName
{
// edit 2: showing use of '.' character in value
texture required_val.file.name optional_val // edit 1: forgot this line in initial post.
// edit 2: showing potentially multiple values
prop_name3 prop_val1 prop_val2
prop_name4 prop_val1
}
}
Run Code Online (Sandbox Code Playgroud)
我成功地解析了内部结构.这是我的代码.
prop_ = pp.Group(pp.Word(pp.alphanums+'_')+pp.Group(pp.OneOrMore(pp.Word(pp.alphanums+'_'+'.'))))
texture_props_ = pp.Group(pp.Literal('texture') + pp.Word(pp.alphanums+'_'+'.')) + pp.ZeroOrMore(prop_)
texture_ = pp.Forward()
texture_ << pp.Literal('texture_unit').suppress() …Run Code Online (Sandbox Code Playgroud) 如何在源C#代码中找到所有变量?
这是我的非工作语法,因为ZeroOrMore(VarDef4)不起作用
Protected = Literal("protected")
Private = Literal("private")
Public = Literal("public")
Modification = Public^Private^Protected
Static = Literal("static")
Auto = Literal("Auto")
MemoryType =(Static^Auto)
Bool = Literal("bool"); Byte = Literal("byte"); Char = Literal("char"); Decimal = Literal("decimal"); Double = Literal("double"); Enum = Literal("enum")
Float = Literal("float"); Int = Literal("int"); Long = Literal ("long"); Sbyte = Literal("sbyte"); Short = Literal("short")
Struct = Literal("struct"); String = Literal("string"); Uint = Literal("uint"); Ulong = Literal("ulong"); Ushort = Literal("ushort")
VariableType = (Bool)^(Byte)^(Char)^(Decimal)^(Double)^(Enum)^(Float)^(Int)^(Long)^(Sbyte)^(Short)^(Struct)^(String)^(Uint)^(Ulong)^(Ushort)
Variable = Word(alphanums + '_' + …Run Code Online (Sandbox Code Playgroud)