Как обнаружить сбор отформатированных чисел и неформатированных чисел из строки с помощью Regex - PullRequest
0 голосов
/ 25 апреля 2020

Я занимаюсь разработкой проекта в Python, который нормализует все заданные строки в чистый текст. Проблема в том, что мои данные вводятся нерегулярно и некоторые числа отформатированы (значения, цены), а другие не отформатированы (годы, возраст). Я пытаюсь собрать их все, не обращая особого внимания на то, отформатирован ли он или нет с помощью следующего сценария.

def get_nums(line):
   formatted_nums = re.compile('\d{1,3}[,.]\d{1,3}')
   nums = re.compile('\d+')
   formatted_nums_data = rm_repetitions(formatted_nums.findall(line))
   nums_data = rm_repetitions(nums.findall(line))
   return formatted_nums_data + nums_data

Однако, учитывая предложение: Rolls-Royce Motor Cars In c , сказал, что ожидает, что его продажи в США останутся стабильными на уровне около 1200 автомобилей в 1990 году. Он выдает мне следующие результаты:

[u'1,200', u'1', u'200', u'1990']

Тем не менее, желаемый результат:

[u'1,200', u'1990']

Есть ли решение для такого рода проблем? Заранее спасибо

1 Ответ

0 голосов
/ 25 апреля 2020

Вам не нужно одно или несколько вхождений, которые + дает вам

Вам нужно 4 вхождения, поэтому {4}

import re

def get_nums(line):
   formatted_nums = re.compile('\d{1,3}[,.]\d{1,3}')
   nums = re.compile('\d{4}') # CHANGE
   # using SET to remove duplicates
   formatted_nums_data = list(set(formatted_nums.findall(line)))
   nums_data = list(set(nums.findall(line)))
   return formatted_nums_data + nums_data

line = "Rolls-Royce Motor Cars Inc. said it expects its U.S. sales to remain steady at about 1,200 cars in 1990"   
print(get_nums (line))
['1,200', '1990']
...