python pyparsing 词 excludeChars
python pyparsing word excludeChars
我正在尝试为可以包含“_”的数字制作解析器。我希望在输出中抑制下划线。例如,一个有效的单词应该是 1000_000,它应该 return 一个数字:1000000。
我为此尝试了 excludeChars 关键字参数,因为 我的理解 是这应该执行以下操作:
"If supplied, this argument specifies characters not to be considered to match, even if those characters are otherwise considered to match."
取自 http://infohost.nmt.edu/tcc/help/pubs/pyparsing/pyparsing.pdf - 第 33 页第 5.35 节(顺便说一句,很棒的 pyparsing 参考)
下面是我的尝试:
import pyparsing as pp
num = pp.Word(pp.nums+'_', excludeChars='_')
num.parseString('123_4')
但我最终得到的结果是“123”而不是“1234”
In [113]: num.parseString('123_4')
Out[113]: (['123'], {})
有什么建议吗?
如何简单地替换下划线字符?
"123_4".replace("_", "")
# "1234"
您误解了 excludeChars 的用途。它不是为了抑制输出中的那些字符,而是作为对初始字符串和正文字符串中给定字符的覆盖。所以这个
Word(nums+'_', excludeChars='_')
与
一样
Word(nums)
添加 excludeChars 是因为用户多次想要定义如下单词:
- 除“:”之外的所有印刷品
- 除“,”或“.”之外的所有印刷品
- 除...之外的所有印刷品
在添加 excludeChars 之前,执行此操作的唯一方法是看起来很笨重:
Word(''.join(c for c in printables if c != ':'))
或
Word(printables.replace(',',''))
现在您可以写
Word(printables, excludeChars=',.')
在您的情况下,您想要解析数值,允许嵌入“_”,但 return 仅允许数字。这将是一个解析操作的好例子:
integer = Word(nums+'_').setParseAction(lambda t: t[0].replace('_',''))
解析操作在解析时调用以进行过滤和转换。您甚至可以将转换为 int 作为解析操作的一部分:
integer = Word(nums+'_').setParseAction(lambda t: int(t[0].replace('_','')))
integer.parseString('1_000') --> [1000]
我正在尝试为可以包含“_”的数字制作解析器。我希望在输出中抑制下划线。例如,一个有效的单词应该是 1000_000,它应该 return 一个数字:1000000。 我为此尝试了 excludeChars 关键字参数,因为 我的理解 是这应该执行以下操作:
"If supplied, this argument specifies characters not to be considered to match, even if those characters are otherwise considered to match."
取自 http://infohost.nmt.edu/tcc/help/pubs/pyparsing/pyparsing.pdf - 第 33 页第 5.35 节(顺便说一句,很棒的 pyparsing 参考)
下面是我的尝试:
import pyparsing as pp
num = pp.Word(pp.nums+'_', excludeChars='_')
num.parseString('123_4')
但我最终得到的结果是“123”而不是“1234”
In [113]: num.parseString('123_4')
Out[113]: (['123'], {})
有什么建议吗?
如何简单地替换下划线字符?
"123_4".replace("_", "")
# "1234"
您误解了 excludeChars 的用途。它不是为了抑制输出中的那些字符,而是作为对初始字符串和正文字符串中给定字符的覆盖。所以这个
Word(nums+'_', excludeChars='_')
与
一样Word(nums)
添加 excludeChars 是因为用户多次想要定义如下单词:
- 除“:”之外的所有印刷品
- 除“,”或“.”之外的所有印刷品
- 除...之外的所有印刷品
在添加 excludeChars 之前,执行此操作的唯一方法是看起来很笨重:
Word(''.join(c for c in printables if c != ':'))
或
Word(printables.replace(',',''))
现在您可以写
Word(printables, excludeChars=',.')
在您的情况下,您想要解析数值,允许嵌入“_”,但 return 仅允许数字。这将是一个解析操作的好例子:
integer = Word(nums+'_').setParseAction(lambda t: t[0].replace('_',''))
解析操作在解析时调用以进行过滤和转换。您甚至可以将转换为 int 作为解析操作的一部分:
integer = Word(nums+'_').setParseAction(lambda t: int(t[0].replace('_','')))
integer.parseString('1_000') --> [1000]