Числовые диапазоны с питоном регулярного выражения
Поэтому я работаю над проблемой анализа текста и пытаюсь удалить все числа от 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 ответа
Вам нужно предшествовать строке шаблона с r
чтобы избежать побега, так что переводчик не поменяется \b
с возвратом. Плюс вы можете упростить шаблон следующим образом:
data_to_clean = re.sub(r'\b([0-9]|[1-9][0-9]{1,2})\b', ' ', data_to_clean)
Числа от 0 до 999
- Один символ [0-9]
- Два символа [1-9][0-9]
- Три символа [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
все еще проходит как действительный.
Я думаю, что вы можете использовать комбинацию вашей попытки с границами слов (\b
) и ваша последняя попытка ([0-9]{1,3}
).
Таким образом, полученное регулярное выражение должно выглядеть так: \b[0-9]{1,3}\b
Если вы проверите демо: regex101.com/r/qDrobh/6 Он должен заменить все 1-значные, 2-значные и 3-значные числа и игнорировать более высокие числа и другие слова.