Числовые диапазоны с питоном регулярного выражения - PullRequest
0 голосов
/ 12 февраля 2019

Итак, я работаю над проблемой анализа текста и пытаюсь удалить все числа от 0 до 999 с регулярным выражением в Python.Я пробовал Regex Numeric Range Generator, чтобы получить регулярное выражение, но у меня ничего не получилось.Я могу только удалить все цифры.

Я пробовал несколько регулярных выражений, но это не сработало.вот что я пробовал

# Remove numbers starting from 0 ==> 999
data_to_clean = re.sub('[^[0-9]{1,3}$]', ' ', data_to_clean)

Я пробовал это также:

# Remove numbers starting from 0 ==> 999
data_to_clean = re.sub('\b([0-9]|[1-8][0-9]|9[0-9]|[1-8][0-9]{2}|9[0-8][0-9]|99[0-9])\b', ' ', data_to_clean)  

это:

^([0-9]|[1-8][0-9]|9[0-9]|[1-8][0-9]{2}|9[0-8][0-9]|99[0-9])$

и это:

def clean_data(data_to_clean):
    # Remove numbers starting from 0 ==> 999
    data_to_clean = re.sub('[^[0-9]{1,3}$]', ' ', data_to_clean)  
    return data_to_clean

У меня много цифр, но мне нужно удалить только те, которые меньше 3 десятичных знаков, и оставить остальные.

Спасибо за вашу помощь

Ответы [ 3 ]

0 голосов
/ 12 февраля 2019

Числа от 0 до 999:

  1. Один символ [0-9]
  2. Два символа [1-9] [0-9]
  3. Три символа [1-9] [0-9] [0-9]

Это дает наивному регулярному выражению /\b(?:[0-9]|[1-9][0-9]|[1-9][0-9][0-9])\b/ Однако у нас есть дублированные классы символов в опциях, поэтому мы можем выделить их

/(?!\b0[0-9])\b[0-9]{1,3}\b/

Это работает, используя отрицательный прогноз (?!\b0[0-9]), чтобы проверить начало слова, за которым следует 0, за которым следует цифра, чтобы игнорировать 01 и т. Д., А затем ищет от 1 до 3 0 - 9персонажи.Поскольку отрицательному взгляду требуется как минимум 2 символа, один 0 по-прежнему считается действительным.

0 голосов
/ 12 февраля 2019

Вам нужно поставить строку шаблона перед r, чтобы избежать экранирования, чтобы интерпретатор не поменял местами \b с пробелом.Плюс вы можете упростить шаблон так:

data_to_clean = re.sub(r'\b([0-9]|[1-9][0-9]{1,2})\b', ' ', data_to_clean)
0 голосов
/ 12 февраля 2019

Я думаю, что вы можете использовать комбинацию вашей попытки с границами слова (\b) и вашей последней попытки ([0-9]{1,3}).

Таким образом, полученное регулярное выражение должно выглядеть следующим образом: \b[0-9]{1,3}\b

Если вы проверите демо: regex101.com/r/qDrobh/6 Он должен заменить все 1-значные, 2-значные и 3-значные числа и игнорировать более высокие числа и другие слова.

...