簡體   English   中英

pyparsing對字符串單/雙引號的驗證

[英]pyparsing validation on single/double quotes on strings

我有一個公式格式,如下所示:

lhs = pp.Word(pp.alphas + pp.alphas8bit + pp.alphanums + "." + "_")
rhs = (
    pp.Optional(pp.oneOf("' \""))
    + pp.Word(pp.alphas + pp.alphas8bit + pp.alphanums + "." + "_" + "-" + ":")
    + pp.Optional(pp.oneOf("' \""))
)
expression = lhs + pp.oneOf("> < = >= <=") + rhs 

所以,它工作正常:

>>> print(expression.parseString("name = 'user1'"))
>>> ['name', '=', "'", 'user1', "'"]
>>> print(expression.parseString('user.id >= 10'))
>>> ['user.id', '>=', '10']

但是,如何驗證rhs何時以"開頭,它也必須以" (雙引號)結尾,對於' (單引號)也是如此。 此外,當輸入不以任何一個開頭(如整數)時,它也必須以不以任何一個結尾。 但現在它永遠不會驗證它們:

>>> print(expression.parseString("name = \"user1'"))  # invalid!
>>> ['name', '=', '"', 'user1', "'"]
>>> print(expression.parseString('user.id >= 10"'))  # invalid!
>>> ['user.id', '>=', '10', '"']

那么,如何進行這樣的驗證呢?

試試看:

lhs = pp.Word(pp.alphas + pp.alphas8bit + pp.alphanums + "." + "_")
rhs_str = pp.Word(pp.alphas + pp.alphas8bit + pp.alphanums + "." + "_" + "-" + ":")
rhs_num = pp.Word(pp.nums)
rhs = (
    (pp.Suppress('"') + rhs_str + pp.Suppress('"'))
    ^ (pp.Suppress("'") + rhs_str + pp.Suppress("'"))
    ^ (rhs_num)
)
expression = lhs + pp.oneOf("> < = >= <=") + rhs

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM