Python if语句不在elif和else语句部分循环

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文件并对其进行解析,查看它的标记并查找每个特定标记中的文本。如果标记中的文本与字符串匹配,我希望它删除字符串的一部分或用其他内容替换它

然而,出于某种原因,代码似乎停留在第三个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文件包含以下数据:

<?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&#038;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”开头。
  • 第三个过滤器删除破折号
  • 第四个过滤器将删除所有空格
  • 第五个过滤器无法删除
    T&R
    ,因为regex模式是
    “T&R$”
    请注意模式中的空格。
第四个筛选器的xml数据错误-将其更改为

...
    <filter>
        <regex>.*T&amp;R$</regex >
        <start_char></start_char>
        <end_char>-4</end_char>
        <action>remove</action>
    </filter>
...
    <filter>
        <regex>T&amp;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&amp;R$</regex >
        <start_char></start_char>
        <end_char>-4</end_char>
        <action>remove</action>
    </filter>
...
    <filter>
        <regex>T&amp;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&amp;R$</regex >
        <start_char></start_char>
        <end_char>-4</end_char>
        <action>remove</action>
    </filter>
...
    <filter>
        <regex>T&amp;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>