2015-08-24 3 views
-3

В python3 мне нужно извлечь 10-значное число из последовательности в формате 555=AB:C$: EF 1234567890, как мне это сделать? Строка между = и 10-значной строкой может быть почти любым символом, в то время как длина этих символов всегда равна 10 ... Я пытался использовать re.compile(), но пока не смог установить соответствующие шаблоны. Любое предложение приветствуется!регулярное выражение python для игнорирования нескольких символов

EDIT # 1: строка содержит всего 20 символов, с последними 10 цифрами, а первые 10 могут быть любыми (пробел, алфавит, $ или другие символы и цифры). Следовательно, я еще не смог определить хороший образец.

EDIT # 2: Проблема в том, что я не могу точно определить, какой символ он находится в конце строки (строка является частью большого файла). Символ после этой строки - это то, что, похоже, не имеет равномерного отображения в windows/linux/unix. Следовательно, я пытаюсь найти его с самого начала, а не с самого конца. Благодаря!

+5

Работает ли '' [-10:] 'для вас? – vaultah

+1

Какие шаблоны вы пробовали и как эти шаблоны не вели себя так, как вы ожидали? – dsh

+1

Если вы хотите извлечь 10-значное число, 'r '\ d {10}', возможно, стоит попробовать. –

ответ

0

Если 10 цифровая строка всегда в конце концов, вы должны быть в состоянии извлечь их

>>> "555=AB:C$: EF 1234567890"[-10:] 
'1234567890' 

Edit:

По вашему редактирования вам не нужно регулярное выражение. Если ваша строка всегда содержит 20 символов, вы можете просто использовать обычные строковые операции в python. Так как [-10:] или даже [10:]

>>> "AB:C$: EF 1234567890"[10:] 
'1234567890' 

Возьмите последний, если вы хотите обработать вашу строку с самого начала.

И если вы не можете использовать строку до конца, так как вы не знаете, где она заканчивается, вы можете просто использовать

>>> "AB:C$: EF 1234567890"[10:20] 
'1234567890' 
1

Если эти 10 цифр всегда последние 10 символов строка, вы можете просто до s[-10:], как это предложено в другом ответе.

Если это не гарантировано, просто используйте regular expression, ищите 10 нулей и игнорируйте остальную часть строки. Образец для этого - \d{10}, то есть \d для цифры и {10} для десяти раз.

>>> import re 
>>> s = "555=AB:C$: EF 1234567890" 
>>> re.search(r"\d{10}", s).group() 
'1234567890' 

Согласно выписке:

Строка между = и 10-значного может быть почти любой символ, в то время как длина этих символов всегда 10

Если вам нужно найти эти цифры в гораздо большем тексте, вы можете найти =, а затем 10 символов, а затем 10 цифр, т.е. =.{10}\d{10}

text = "foo bar not a block 1234567890 blub stuff 555=AB:C$: EF 1234567890 more unrelated stuff and another block 555=AB:C$: EF 1234567890 and finally more stuff" 
p = re.compile(r"=.{10}(\d{10})") 
for x in re.finditer(p, text): 
    print x.group(1) 

Выход являются последние две группы 1234567890.

Смежные вопросы