Получение неправильных данных с помощью регулярных выражений - PullRequest
0 голосов
/ 22 ноября 2018

Я столкнулся с проблемой здесь.Версия Python 3.7.

https://regex101.com/r/WVxEKM/3

screenshot of regex101 web page

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

Вот мой код:

part_number = str(row)
partn = re.search(r"([a-zA-Z0-9 ,-]+)", part_number)
print(partn.group(0))

Вот что такое partn.group(0)печать:

FMC2H-OHC-100018-00

Мне нужно получить строку в виде регулярного выражения с запятой и значением:

FMC2H-OHC-100018-00, 2

Это мое регулярное выражение неверно ?.Что происходит с запятыми и значениями?

Значения ROW Вот значения строк, преобразованные в строку, данные, полученные из моей базы данных, также включают скобки и кавычки:

('FMC2H-OHC-100018-00', 2)
('FMC2H-OHC-100027-00', 0)

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Я не думаю, что вам нужно преобразовывать значения строки в строку, а затем попытаться проанализировать результат с помощью регулярного выражения.Подсказка была, когда вы сказали в своем обновлении, что «Здесь значения строк преобразованы в строку», подразумевая, что они изначально в каком-то другом формате - потому что в результате получается, что они на самом деле tuple s из двух значений, строки ицелое число.

Если это правильно, тогда вы можете избежать преобразования их в строки, а затем пытаться проанализировать их с помощью регулярного выражения, потому что вы можете получить нужную строку, просто используя сравнительно простое встроенное форматирование строк.Возможности Python должен сделать это.

Вот что я имею в виду:

# Raw row data retrieved from database.
rows = [('FMC2H-OHC-100018-00', 2),
        ('FMC2H-OHC-100027-00', 0),
        ('FMC2H-OHC-100033-00', 0),
        ('FMC2H-OHC-100032-00', 20),
        ('FMC2H-OHC-100017-00', 16)]

for row in rows:
    result = '{}, {}'.format(*row)  # Convert data in row to a formatted string.
    print(result)

Вывод:

FMC2H-OHC-100018-00, 2
FMC2H-OHC-100027-00, 0
FMC2H-OHC-100033-00, 0
FMC2H-OHC-100032-00, 20
FMC2H-OHC-100017-00, 16
0 голосов
/ 22 ноября 2018

Ваша проблема в том, что вы не включили ' в свою группу персонажей.Таким образом, это регулярное выражение соответствует, например, FMC2H-OHC-100018-00 и , 2, но не оба вместе.Также re.search прекращает поиск после того, как находит первое совпадение.Поэтому, если вы хотите только первое совпадение, выберите:

re.search(r"([\w ',-]+)", part_number)

Где я изменил A-Za-z0-9 на \w, потому что он короче и более читабелен.Если вы хотите список, который соответствует всем элементам, используйте:

re.findall(r"([\w ',-]+)", part_number)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...