Python 根据if语句,如何在此循环中使用正则表达式?
我的代码逐行读取已解析的文本文件。我正在尝试使用我的reg表达式提取故障代码列表。我的问题是,当我在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
“[: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