2015-06-01 6 views
-1

я строка отформатирована как таковые: | birth_date = 22 January 1898 |Python Regex после известной строки

Я хочу написать регулярное выражение, которое ищет birth_date, и не получает 4 цифр последовательности цифр после birth_date вплоть до символа трубы

+2

Пробовали что-нибудь? –

+0

Какие 4 цифры? Год? –

+0

Что-то вроде '\ d {4} \ s * \ | $' Я бы это сделал, полагая, что строка заканчивается на трубе. – chris85

ответ

0
import re 
print re.sub(r'\D', '', "| birth_date = 22 January 1898 |") 
# output => 221898 

# if you want only the last 4 digits: 
print re.sub(r'(\D)', '', "| birth_date = 22 January 1898 |")[-4:] 
# output => 1898 
0

Предполагая, что вы хотите, год, и все строки одинаково отформатирован, вы можете избежать регулярных выражений:

test = '| birth_date = 22 January 1898 |' 
year = test.split()[-2] 
print year 

Расширение этого в функцию:

def get_year(input): 
    '''Returns year as integer, empty string if invalid input.''' 

    output = '' 
    if 'birth_date' in input: 
     output = input.split()[-2] 
     try: 
      output = int(output) 
     except: 
      output = '' 
    return output 

test = ['| birth_date = 22 January 1898 |', 
     '| death_date = 22 January 1898 |', 
     '| birth_date = 22 January XXXMLC |', 
     '| birth_date = 23 January 1961 |'] 

for input in test:  
    result = get_year(input) 
    if not result: 
     result = 'Invalid input' 
    print(input, result) 
0

Предполагая, что вы написали функцию IsInt, которая проверяет, если число является ИНТ

for x in range(0, len(string) - len(str(int))): 
    if isint(string[x:x+len(str(int))]): 
     print string[x:x + len(str(int))] 
0

Регулярное выражение может выглядеть так:

birth_date\s*=\s*\d{1,2}\s*\w+\s*(\d{4})\s*\| 

И год в группа 1.

>>> pat = re.compile(r'birth_date\s*=\s*\d{1,2}\s*\w+\s*(\d{4})\s*\|') 
>>> print pat.search('| birth_date = 22 January 1898 |').group(1) 
1898 
Смежные вопросы