Сопоставить базовый CSV-шаблон с регулярным выражением - PullRequest
0 голосов
/ 09 ноября 2019

У меня проблемы с сопоставлением следующего вывода типа csv с регулярным выражением. Например, с:

Ten Thousand,10000
Ten thousand
helloasdf,x

Я подумал, что, возможно, смогу использовать базовое:

# start at either the start-of-line or a comma
(^|,)
# consume up through a comma (though end-of-line will not have that
[^,]*
# go until the next comma or end of line
($|,)

Но это не сработает, даже если я оберну его в группе и попробуюповтори это. Что я здесь не так делаю? Ссылка здесь: https://regex101.com/r/AmzZ8n/1

1 Ответ

0 голосов
/ 09 ноября 2019

Регулярное выражение, которое я использовал:

(?:^|,)([^,]*)
  1. (?:^|,) Группа без захвата, которая соответствует либо началу строки, либо ,.
  2. ([^,]*) Группа захвата, которая соответствует 0 или более не запятым символам. Это позволяет пустые столбцы.

Я добавил несколько дополнительных тестов. Один проблемный может быть последним:

',d,e'

В обработчике регулярных выражений до Python 3.7 была ошибка в обработке совпадений нулевой длины в некоторых случаях. Вам может потребоваться установить пакет regex в https://pypi.org/project/regex/ из репозитория PYPI, а затем:

import regex as re

Код:

import re

lines = [
    'Ten Thousand,10000',
    'Ten thousand',
    'helloasdf,x',
    'a,b,,c,',
    ',d,e'
]

regex = re.compile('(?:^|,)([^,]*)')
for line in lines:
    print(regex.findall(line))

Отпечатки:

['Ten Thousand', '10000']
['Ten thousand']
['helloasdf', 'x']
['a', 'b', '', 'c', '']
['', 'd', 'e']

Демонстрация запуска

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...