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
。
答案 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)