所以我有以下代码:
cus_str = "show configuration " #intiate router command string variable
with open(var) as config_file: #open file
for line in config_file: #line by line reading of file
if '"xe-" + #anynumber + "/" #anynumber + "/" + #anynumber' in line:
line = line.replace('\n' , '').replace('"' , '').replace(']' , '') #removes all extra characters
i = "| except " + (line.split("cust ", 1)[1]) + " " #split the line and save last index (cust name)
cus_str+=i #append to string
config_file.close()
该行:如果''xe-'+ #anynumber +“ /” #anynumber +“ /” + #anynumber'位于该行:这是我在语法方面的努力。
我正在查看文件中的一行是否包含以下字符串:“ xe- 数字 / 数字 / 数字”(例如:“ xe-6 / 1/10”)。它将始终采用这种格式,但是数字会更改。我将使用哪种语法最有效地做到这一点。
谢谢!
答案 0 :(得分:3)
您可以为此使用正则表达式。正则表达式允许您指定文本模式(尽管并非所有模式都可以表示为正则表达式)。然后,我们可以compile
将该表达式转换成Pattern
对象,并使用该对象为模式的search
字符串。
import re
pattern = re.compile(r'"xe-\d+/\d+/\d+"') # \d+ is "one or more digits".
# Everything else is literal
with open(var) as config_file:
for line in config_file:
if pattern.search(line): # will return a Match object if found, else None
...
答案 1 :(得分:1)
听起来像Regular Expressions库的工作!
这个数字是日期吗?您可以限制位数。
from re import search, compile #Import the re library with search
pattern = compile(r"xe-\d{1,2}\/\d{1,2}\/\d{1,2}") #Use this pattern to find lines
cus_str = "show configuration " #intiate router command string variable
with open(var) as config_file: #open file
for line in config_file: #line by line reading of file
if search(pattern, line): #Returns None if match is not found
line = line.replace('\n' , '').replace('"' , '').replace(']' , '') #removes all extra characters
i = "| except " + (line.split("cust ", 1)[1]) + " " #split the line and save last index (cust name)
cus_str+=i #append to string
正则表达式:xe-\d{1,2}\/\d{1,2}\/\d{1,2}
匹配“ xe-”,后跟3组带有斜杠分隔符的数字对。每组数字的长度可以是1个或2个字符。
您不需要关闭config_file
,因为退出块时with
语句会为您执行此操作。
当模式不匹配时,我不确定您试图用cus_str += i
完成什么。就目前情况而言,除非您将行缩进1级,否则它将仅重复与上一行相同的i
。或者,如果第一行不包含模式,则会给您一个错误。
答案 2 :(得分:0)
您可以使用简单的程序(例如,https://pythex.org/之类的一些在线工具)来测试正则表达式,然后制作程序,向您指出正确方向的一个小例子是:
import re
config_file = ["xe-6/1/10", "xf-5/5/542", "xe-4/53/32" ]
rex = re.compile(r'xe-[\d]+/[\d]+/[\d]+')
for line in config_file: #line by line reading of file
if rex.search(line):
print(line)
xe-6/1/10
xe-4/53/32