2015-12-09 10 views
-1

содержимого из iplist.txt в этом формате:Python re.search точное совпадение по переменному

CART 6385 Cell IP: 10.10.10.10 
CART 3854 Cell IP: 10.10.10.10 
CART  385 Cell IP: 10.10.10.10 

мне нужна помощь в получении сценария питона ниже, чтобы соответствовать только 385 и распечатать результаты.

Мой код:

IPList = open('iplist.txt','r')  
CartID = raw_input('What is the Cart ID? ') 

for line in IPList:    
    if re.search(CartID, line): 
     print line.strip() 

Выход:

What is the Cart ID? 385 
CART 6385 Cell IP: 10.10.10.10 
CART 3854 Cell IP: 10.10.10.10 
CART  385 Cell IP: 10.10.10.10 

Я просто нужно, чтобы соответствовать CART 385.

ответ

1

Вы должны использовать слово граница \b последовательности или последовательности пробельные \s ограничить совпавшие строки,

re.match(r'^\S+\s+\b%s\b' % CartID, line) 

В конце концов, вы будете иметь:

^ # At the start of the line 
\S+ # Match one or more non-blank chars 
\s+ # Match one or more whitespace chars 
\b # Word boundary 
%s # The replaced CartID 
\b # Word boundary (i.e. followed by whitespace) 
+0

Что такое идентификатор корзины? 385 Traceback (последний последний звонок): Файл «RQ.py», строка 11, в , если re.match (r '^ \ S + \ s \ + \ b% d \ b'% CartID, строка) : ТипError:% d format: требуется номер, а не str – teamg

+0

@gineraso, Извините, я упустил из виду тот факт, что это была строка, вместо этого использовалась '% s' – memoselyk

+0

Не беспокойтесь. С% s я не получаю никаких результатов для любого шаблона. – teamg

3

re.match Использование вместо search, чтобы соответствовать началу строки, а затем использовать метасимволы regex, чтобы скопировать номер, который вы ищете. В вашем случае линия начинается с "CART", и вы можете использовать "\s+" (сопоставляя все пробелы, чтобы вы не получили что-то вроде 3385) в скобки.

import os 
import re 

# todo: debug - generate test file 
if not os.path.exists('iplist.txt'): 
    open('iplist.txt', 'w').write("""CART 6385 Cell IP: 10.10.10.10 
CART 3854 Cell IP: 10.10.10.10 
CART  385 Cell IP: 10.10.10.10""") 

CartID = raw_input('What is the Cart ID? ') 

with open('iplist.txt') as IPList: 
    for line in IPList: 
     if re.match(r"CART\s+{}\s".format(CartID), line): 
       print line.strip() 
+0

Я не вижу re.match в вашем примере. – teamg

+0

@gineraso - Я вставил неверную версию кода - исправлено. – tdelaney

+0

Что такое идентификатор корзины? 385 Traceback (самый последний вызов последнего): Файл "RQ.py", строка 12, в если re.match (г "ТЕЛЕГУ \ S + {} \ S" .format (CartID), линия): ValueError : имя поля нулевой длины в формате – teamg