Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 根据if语句,如何在此循环中使用正则表达式?_Python_Regex_If Statement - Fatal编程技术网

Python 根据if语句,如何在此循环中使用正则表达式?

Python 根据if语句,如何在此循环中使用正则表达式?,python,regex,if-statement,Python,Regex,If Statement,我的代码逐行读取已解析的文本文件。我正在尝试使用我的reg表达式提取故障代码列表。我的问题是,当我在if语句中包含正则表达式时,我没有收到所需的文本 正则表达式“[:fault].+[\d |\d].+[\d |\d].+[\d |\d]+[Type\S]”应返回一个故障代码,例如: fault_0A_01_00 Type:Warning, triggered. 建立故障列表并使用此功能。我能弥补我的缺点。然而,我放弃了这个列表,并决定使用正则表达式来查找故障,而不是不时更新我的故障列表 d

我的代码逐行读取已解析的文本文件。我正在尝试使用我的reg表达式提取故障代码列表。我的问题是,当我在if语句中包含正则表达式时,我没有收到所需的文本

正则表达式
“[:fault].+[\d |\d].+[\d |\d].+[\d |\d]+[Type\S]”
应返回一个故障代码,例如:

fault_0A_01_00 Type:Warning, triggered. 
建立故障列表并使用此功能。我能弥补我的缺点。然而,我放弃了这个列表,并决定使用正则表达式来查找故障,而不是不时更新我的故障列表

def find_fault(self, fault):
    count = 0
    l_fault = fault
    with open(self.file) as f:
        for line in f.readlines():
            if l_fault in line: 
                count += 1
    self.fault_dict[l_fault] = count
这是我的循环,它不返回基于正则表达式的所需文本

def find_fault(self, fault):
    count = 0
    l_fault = fault
    regex_txt = r"[:fault]_+[\d|\D]_+[\d|\D]_+[\d|\D]+[Type\S]"
    #pattern = re.compile(regex_txt, re.IGNORECASE)
    with open(self.file) as f:
        for line in f.readlines():
            if l_fault in regex_txt:
                count =+ 1
            else:
                return -1
    self.fault_dict[fault] = count
现在,在循环中使用regex并使用if语句,我的故障字典返回为:

 {'a': 1, 'e': 1, 'd': 1, 'l': 1, 'p': 1, 'u': 1, 't': 1, 'y': 1, '_': 1, 'D': 1}
我的期望是:

{':fault_01_00_00': 1, ':fault_01_00_01': 1, ':fault_01_00_02': 1, ':fault_01_00_03': 1, ':fault_01_00_04': 1, ':fault_01_00_05': 1, ':fault_01_00_06': 1, ':fault_01_00_07': 1, ':fault_01_00_08': 1, ':fault_01_00_09': 1}

您从不将正则表达式应用于字符串
。您需要使用例如'faults=re.findall(regex_txt,line)')应用它:


您从不将正则表达式应用于字符串
。您需要使用例如'faults=re.findall(regex_txt,line)')应用它:

您的regex_txt(您的模式)设置不正确。当您使用
[fault]
时,您的意思是要查找一个字符,它是f、a、u、l或t

您还必须指定要查找的位数。在您提供的测试字符串“:fault\u 0A\u 01\u 00 Type:Warning,triggered”中,一行有两位数字。假设您需要1或2位数字,则必须输入
\d+
+
表示您正在查找1个或2个元素

您的regex_txt(您的模式)设置不正确。当您使用
[fault]
时,您的意思是要查找一个字符,它是f、a、u、l或t


您还必须指定要查找的位数。在您提供的测试字符串“:fault\u 0A\u 01\u 00 Type:Warning,triggered”中,一行有两位数字。假设您需要1或2位数字,则必须输入
\d+
+
表示您正在查找1个或2个元素

顺便说一句,我认为你想要的正则表达式更像这样:
r”:fault_[\d|d]{2}{u[\ d|d]{2}{u[\ d|d]{2}
假设你期望你的键是,例如
:fault_01_00_01'
。使用您的正则表达式,它会导致
':故障\u 0A\u 01\u 00类型:警告,已触发。请参阅和正则表达式。您的正则表达式在Type\S之后包含所有字符,因为您只需在末尾加一个[\d |\d]+就可以得到任意数量的数字或字母。顺便说一句,我认为您想要的正则表达式更像这样:
r:fault_[\d |\d]{2}{d |\d]{2}{2}
,您希望您的密钥为,例如,
”:fault\u 01\u 00\u 01'
。使用您的正则表达式,它会导致
':故障\u 0A\u 01\u 00类型:警告,已触发。请参阅和正则表达式。您的正则表达式还包括键入\S后的所有字符,因为您只需将[\d |\d]+放在靠近末尾的位置,就可以产生任意数量的数字或字母。使用[:fault]+实际上可以工作(但这不是最好的做法),而且数字也可以工作,但可能不是@cinemod所期望的方式。请看我对他关于链接的回答的评论。是的,你说得对!然而,cinemod使用了
[:fault]+
[\d |\d]+
,这两种方法都不起作用(因此我感到困惑)。使用[:fault]+实际上起作用(虽然不是最好的方法),数字也起作用,但可能不是@cinemod所期望的方式。请看我对他关于链接的回答的评论。是的,你说得对!然而,cinemod使用了
[:fault].+
[\d |\d].+
,这两种方法都不起作用(因此我感到困惑)。看看你的正则表达式是什么意思。看看你的正则表达式是什么意思。
with open(self.file) as f:
    for line in f.readlines():
        faults = re.findall(regex_txt, line) #returns list of found strings
        if l_fault in faults:
            count =+ 1
        else:
            return -1