Я ищу регулярное выражение, которое превращает эту строку:Python Regex удалить цифры, за исключением лет
'foo bar 12 3.4 32 1992 112 0433 3312 182470921358 3,412 some text'
в эту строку:
'foo bar 1992 some text'
То есть, я хочу, чтобы удалить все цифры от строка, за исключением цифр, которые представляют годы (1000 - 2999).
Я искал регулярное выражение функции, что делает что-то вроде
(<PATTERN1> except <PATTERN2>)
я смог придумать <PATTERN1>
и <PATTERN2>
:
<PATTERN1> -> \b[0-9(.,)+]*\b
<PATTERN2> -> \b[12]{1}[0-9]{3}\b
В коде:
>>> import re
>>> s = 'foo bar 12 3.4 32 1992 112 0433 3312 182470921358 3,412 some text'
>>> re.sub(r'\b[0-9(.,)+]*\b', '', s)
'foo bar some text'
>>> import re
>>> print re.sub(r'\b[0-9(.,)+]*\b', '', s)
foo bar some text
>>> re.sub(r'\b[12]{1}[0-9]{3}\b', '', s)
'foo bar 12 3.4 32 112 0433 3312 182470921358 3,412 some text'
Но я не смог собрать их вместе. Положительный lookbehind тоже не делает этого.
Это: только
(?<=\b[12]{1}[0-9]{2})[0-9(.,)+]{1}\b
матчи 2
из 1992
вместо 1992
полностью.
Любые предложения?
Есть ли причина, по которой вам нужно использовать регулярные выражения? Вы можете просто использовать 'split()' и удалить элементы, которые являются числами за пределами диапазона. – Arc676