Как выполнить синтаксический анализ этой строки с помощью pyparsing

76
6

Я могу проанализировать my_str с помощью следующего кода регулярного выражения:

([\w\s]*)\s(\w+)

но я хочу использовать pyparsing.

Как я могу это сделать?

my_str = "aa234"
expected_result = ["aa234", ""]

my_str = "aa234 bbb2b ccc ddd eee"
expected_result = ["aa234 bbb2b ccc ddd", "eee"]

my_str = "aa234 bbb2b ccc ddd eee fff ggg hhh"
expected_result = ["aa234 bbb2b ccc ddd eee fff ggg", "hhh"]

спросил(а) 2021-01-25T18:51:46+03:00 4 месяца, 3 недели назад
1
Решение
78

Вот ваш образец анализатора:

from pyparsing import *

stringWord = Word(alphas, alphanums)

# only want words not at the end of the string for the leading part
leadingWord = stringWord + ~LineEnd()

leadingPart = originalTextFor(stringWord + ZeroOrMore(leadingWord))

# define parser, with named results, similar to named groups in a regex
parser = leadingPart("first") + Optional(stringWord, default='')("second")

Здесь, как это работает на практике:

tests = ["aa234", 
"aa234 bbb2b ccc ddd eee ",]
for test in tests:
results = parser.parseString(test)
print results.dump()
print results.first
print results.second

Печать:

['aa234', '']
- first: aa234
- second:
aa234

['aa234 bbb2b ccc ddd', 'eee']
- first: aa234 bbb2b ccc ddd
- second: eee
aa234 bbb2b ccc ddd
eee

ответил(а) 2021-01-25T18:51:46+03:00 4 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема