У меня есть следующее регулярное выражение:
(?<!__num)10\b
и когда я хочу обнаружить 10 из следующего предложения
может быть B110\чисел и 10 чисел в этом предложении
возвращается следующее
может быть B1
10
\чисел и10
чисел в этом предложении
но я не хочу, чтобы 10 было обнаружено внутри 110, поэтому я изменил регулярное выражение на
[^\d+](?<!__num)10\b
В этом случае результат возвращается с 10, предшествующим пробельному символу.
Я хочу указать только число, указанное в регулярном выражении. Например, если я даю 110 вместо 10 в регулярном выражении, я хочу определить 110, даже если ему предшествует "B." Итак, как я могу создать регулярное выражение? Спасибо.
Вы можете использовать
(?<!__num)(?<!\d)10(?!\d)
Первые два отрицательных lookbehind будут выполняться в одном и том же месте в строке, и (?<!__num)
будет убедиться, что нет __num
непосредственно перед текущим местоположением и (?<!\d)
будет убедиться, что цифры нет.
Отрицательный результат (?!\d)
гарантирует, что после текущего местоположения (после заданного номера) не будет цифры.
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'>
(?<!__num)10\b
на(?<!__num)(?<!\d)10\b
(так как это python)