Python if语句不在elif和else语句部分循环
我试图打开一个XML文件并对其进行解析,查看它的标记并查找每个特定标记中的文本。如果标记中的文本与字符串匹配,我希望它删除字符串的一部分或用其他内容替换它 然而,出于某种原因,代码似乎停留在第三个if语句中,并认为end_int始终等于none。我不知道为什么,因为在查找变量end_int的值时,我已经打印出了值,它从xml文件中获得了所有的“end_char”标记值,这就是end_int应该是什么。但是在if语句中,它认为end_char总是None mfn_pn变量是用户输入的条形码,类似于ATL-157-1815、DFW-184-8378、ATL-324-3243、DFW-432-2343、ATL 343 8924、DFW 342 3413、DFW-324 3423 T&R XML文件包含以下数据:Python if语句不在elif和else语句部分循环,python,xml,if-statement,variables,printing,Python,Xml,If Statement,Variables,Printing,我试图打开一个XML文件并对其进行解析,查看它的标记并查找每个特定标记中的文本。如果标记中的文本与字符串匹配,我希望它删除字符串的一部分或用其他内容替换它 然而,出于某种原因,代码似乎停留在第三个if语句中,并认为end_int始终等于none。我不知道为什么,因为在查找变量end_int的值时,我已经打印出了值,它从xml文件中获得了所有的“end_char”标记值,这就是end_int应该是什么。但是在if语句中,它认为end_char总是None mfn_pn变量是用户输入的条形码,类似于
<?xml version="1.0" encoding="utf-8"?>
<metadata>
<filter>
<regex>ATL|LAX|DFW</regex >
<start_char>3</start_char>
<end_char></end_char>
<action>remove</action>
</filter>
<filter>
<regex>DFW.+\.$</regex >
<start_char>3</start_char>
<end_char>-1</end_char>
<action>remove</action>
</filter>
<filter>
<regex>\-</regex >
<replacement></replacement>
<action>substitute</action>
</filter>
<filter>
<regex>\s</regex >
<replacement></replacement>
<action>substitute</action>
</filter>
<filter>
<regex>1P</regex >
<start_char>2</start_char>
<end_char></end_char>
<action>remove</action>
</filter>
<filter>
<regex>T&R$</regex >
<start_char></start_char>
<end_char>-4</end_char>
<action>remove</action>
</filter>
</metadata>
对于elif和else语句中的print语句,没有输出任何内容,因为出于某种原因,代码认为start_int永远不等于“None”,而else语句的所有其他情况也不起作用。它认为end_int=='None'总是正确的,我不确定它为什么会这样认为,因为在if语句外打印“end_int”会从XML文件获得所有end_char值
尝试“DFW-324 3423 T&R”
- 第一个过滤器删除前三个字符
- 第二个筛选器正则表达式不匹配,因为模式要求字符串以“DFW”开头。
- 第三个过滤器删除破折号
- 第四个过滤器将删除所有空格
- 第五个过滤器无法删除
,因为regex模式是T&R
请注意模式中的空格。“T&R$”
...
<filter>
<regex>.*T&R$</regex >
<start_char></start_char>
<end_char>-4</end_char>
<action>remove</action>
</filter>
...
<filter>
<regex>T&R$</regex >
<start_char></start_char>
<end_char>-4</end_char>
<action>substitute</action>
</filter>
...
<filter>
<regex>[.]$</regex >
<start_char>3</start_char>
<end_char>-1</end_char>
<action>substitute</action>
</filter>
。。。
*T&;R$
-4
去除
或者改成
...
<filter>
<regex>.*T&R$</regex >
<start_char></start_char>
<end_char>-4</end_char>
<action>remove</action>
</filter>
...
<filter>
<regex>T&R$</regex >
<start_char></start_char>
<end_char>-4</end_char>
<action>substitute</action>
</filter>
...
<filter>
<regex>[.]$</regex >
<start_char>3</start_char>
<end_char>-1</end_char>
<action>substitute</action>
</filter>
。。。
T&;R$
-4
代替
如果希望第二个筛选器在结束时删除单个句点,请将其更改为
...
<filter>
<regex>.*T&R$</regex >
<start_char></start_char>
<end_char>-4</end_char>
<action>remove</action>
</filter>
...
<filter>
<regex>T&R$</regex >
<start_char></start_char>
<end_char>-4</end_char>
<action>substitute</action>
</filter>
...
<filter>
<regex>[.]$</regex >
<start_char>3</start_char>
<end_char>-1</end_char>
<action>substitute</action>
</filter>
。。。
[.]$
3.
-1
代替
请注意,每次筛选标记迭代都可能会改变字符串,因此删除和替换的顺序很重要。如果没有打印任何内容,则必须是
re.match()
调用返回false。@John Gordon它在If语句内部打印,而不是在elif或else中打印。这意味着它认为if语句中的情况总是正确的,但我不确定为什么,因为在if语句之外,当我第一次找到变量时,它打印出来的结果是正确的——只是在if语句内部没有。你能更新问题以包含输出吗,所以我们可以理解你的意思吗?我刚刚用mfn\u pn='ATL-157-1815'
浏览了你例子中'filter'
标记的所有代码,看起来它做了所有它被告知的事情;第三个过滤器删除划线制造mfn_pn='324 3423 T&R'
;第四个过滤器删除所有构成mfn_pn='3243423T&R'
的空格;第五个过滤器无法删除T&R,因为正则表达式模式是“T&R$”请注意模式中的空格。出于某种原因,执行“T&R$”对我不起作用。然而,“*T&;R$”确实起了作用。非常感谢你的帮助@Sophia在我的回答中,我给出了该过滤器的两种选择,一种是用*T&;R$
和带有T&;R$
-它们都可以工作。
...
<filter>
<regex>[.]$</regex >
<start_char>3</start_char>
<end_char>-1</end_char>
<action>substitute</action>
</filter>