Обнаружение только числа в регулярном выражении - PullRequest
0 голосов
/ 11 октября 2018

У меня есть следующее регулярное выражение:

(?<!__num)10\b

, и когда я хочу обнаружить 10 из следующего предложения

, могут ли быть B110 \ цифры и 10 чисел в этом предложении

возвращается следующее

могут ли быть B1 10 \ числа и 10 числа в этом предложении

но яЯ не хочу, чтобы 10 обнаруживался внутри 110, поэтому я изменил регулярное выражение на

[^\d+](?<!__num)10\b

. В этом случае результат возвращается с 10 перед пробелом.

Я хочу, чтобы идентифицировалось только число, указанное в регулярном выражении.Например, если я задаю 110 вместо 10 в регулярном выражении, я хочу, чтобы 110 было идентифицировано, даже если ему предшествует "B."Итак, как я могу построить регулярное выражение?Спасибо.

1 Ответ

0 голосов
/ 11 октября 2018

Вы можете использовать

(?<!__num)(?<!\d)10(?!\d)

См. Демонстрационную версию regex

Первые два отрицательных вида будут выполнены в одном месте в строке и (?<!__num)убедится, что нет __num непосредственно перед текущим местоположением, а (?<!\d) убедится, что цифр нет.

Отрицательный прогноз (?!\d) убедится, что сразу после текущего местоположения нет цифры.(после заданного числа).

Демонстрация Python :

import re
# val = "110" # => <_sre.SRE_Match object; span=(14, 17), match='110'>
val = "10"
s = "can there be B110 numbers and 10 numbers in this sentence"
print(re.search(r'(?<!__num)(?<!\d){}(?!\d)'.format(val), s))
# => <_sre.SRE_Match object; span=(30, 32), match='10'>
...