pyparsing:匹配同一行的单词

pyparsing: match words on same line

在 pyparsing 中,我正在寻找一种简单的方法来匹配出现在同一行上的单词(或其他表达式),即它们之间没有任何换行符。

您可以覆盖特定解析器元素的默认空白跳过字符 - 在这种情况下,word_on_the_same_line 仅跳过空格,但不跳过换行符。

import pyparsing as pp

word = pp.Word(pp.alphas, pp.alphanums)

# define special whitespace skipping, so that newlines aren't 
# skipped when matching a word_on_the_same_line
word_on_the_same_line = word().setWhitespaceChars(" ")

# compare results with this version of word_on_the_same_line to see 
# how pyparsing treats newlines as skippable whitespace
# word_on_the_same_line = word()

line = pp.Group(word("key") + word_on_the_same_line[...]("values"))

test = """\
key1 lsdkjf lskdjf lskjdf sldkjf
key2 sdlkjf lskdj lkjss lsdj
"""

print(line[...].parseString(test).dump())

打印:

[['key1', 'lsdkjf', 'lskdjf', 'lskjdf', 'sldkjf'], ['key2', 'sdlkjf', 'lskdj', 'lkjss', 'lsdj']]
[0]:
  ['key1', 'lsdkjf', 'lskdjf', 'lskjdf', 'sldkjf']
  - key: 'key1'
  - values: ['lsdkjf', 'lskdjf', 'lskjdf', 'sldkjf']
[1]:
  ['key2', 'sdlkjf', 'lskdj', 'lkjss', 'lsdj']
  - key: 'key2'
  - values: ['sdlkjf', 'lskdj', 'lkjss', 'lsdj']