pyparsing scanString с пробелами, которые не могут проанализировать - PullRequest
0 голосов
/ 12 сентября 2018

Я использую выражение регулярного выражения ниже (с pyparsing), которое не дает никакого вывода. Любая идея, что я делаю здесь не так.

>>> pat = pp.Regex('\s+\w+')    
>>> x = " ***    abc   xyz   pqr"
>>> for result, start, end in pat.scanString(x):
    print result, start, end

, если \s удалено. Получаем данные

>>> pat = pp.Regex('\w+')   
>>> x = " ***    abc   xyz   pqr"
>>> for result, start, end in pat.scanString(x):
    print result, start, end

['abc'] 8 11
['xyz'] 14 17
['pqr'] 20 23

1 Ответ

0 голосов
/ 12 сентября 2018

Согласно это , пробелы по умолчанию пропускаются при pyparsing.

Во время процесса сопоставления пробелы между токенами по умолчанию пропускаются (хотя это можно изменить).

Но Regex класс наследует от ParserElement , который имеет метод leftWhitespace ().

sourceWhitespace (self) source code

Отключает пропуск пробелов перед сопоставлением символов в определенный шаблон ParserElement. Это обычно используется только внутренне с помощью модуля pyparsing, но может понадобиться в некоторых чувствительные к пробелам грамматики.

Итак, этот код работает:

>>> pat = pp.Regex('\s+\w+')
>>> pat.leaveWhitespace()
>>> x = " ***    abc   xyz   pqr"
>>> for result, start, end in pat.scanString(x):
        print result, start, end

['    abc'] 4 11
['   xyz'] 11 17
['   pqr'] 17 23
...