Python re.search与变量完全匹配

时间:2015-12-09 19:39:58

标签: python variables pattern-matching

iplist.txt的内容采用以下格式:

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

我需要帮助让下面的python脚本只匹配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

2 个答案:

答案 0 :(得分:3)

使用re.match代替search仅匹配行的开头,然后使用正则表达式元字符括起您要查找的数字。在您的情况下,该行以"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()

答案 1 :(得分:1)

您应该使用单词boundary \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)