搜索包含数字的字符串python

时间:2018-07-31 19:52:33

标签: python regex string digits

所以我有以下代码:

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”)。它将始终采用这种格式,但是数字会更改。我将使用哪种语法最有效地做到这一点。

谢谢!

3 个答案:

答案 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个字符。

enter image description here

侧注

  • 您不需要关闭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