gpt4 book ai didi

python - 我怀疑 re.match 弄乱了控制流

转载 作者:行者123 更新时间:2023-11-28 20:52:01 24 4
gpt4 key购买 nike

if block 内的正则表达式匹配是否会干扰 else block 内的代码?

在下面的代码中,我有 100 个测试字符串作为 job_name 输入,应该附加到我的 del_job_ids 数组。其中只有 99 个被附加。

for j in jobs:
name = jobs[j]['Job_Name'][0]
p=re.compile("(\\w*):?\\w*-?\\d*")
if ((':' in name) or ('-' in name)):
name=p.match(name).group(1)
else:
#if name==job_name and state!='C':
#print "ok"
#del_job_ids.append(j)
pass
if name==job_name and state!='C':
del_job_ids.append(j)
name=None

如果我注释掉 name=p.match(name).group(1) 这一行,之前没有附加的一个案例现在被附加了。我还可以通过取消注释 else block 中的代码来附加该作业(字符串通过了附加条件)。

字符串之间的区别在于,其中 99 个字符串有冒号、破折号或两者都有,而另一个字符串则两者都没有。我多次测试了正则表达式。没有破折号或冒号的字符串应该放在 else 子句中并使用在 for 循环顶部定义的“默认”名称。

最佳答案

你在这里做了一些非常奇怪的事情。让我们来看看其中的一些。

1 - name = jobs[j]['Job_Name'][0]

在我看来,也许工作是一个字典的容器,它有一个键“Job_Name”,这个键的值是一个列表或元组。我想你的意思可能是:

name = j['Job_name'][0]

如果 jobs 只是一个字符串列表,即工作名称,那么您只需要:name = j,您可以跳过它 - 当您想要引用它时只需使用 j

2 - p=re.compile("(\\w*):?\\w*-?\\d*")

您每次通过循环时都在编译您的正则表达式,每次都完全相同,并且您只使用它一次。在循环开始之前执行此编译。

3 - 您根本不需要 else 子句。如果你想在 Python 中使用“else if”,你可以使用“elif”。

4 - 您的正则表达式可以通过使用原始 字符串来消除所有双重转义来简化:p=re.compile(r"(\w*):?\w* -?\d*")

5 - 你的整个正则表达式可能是不必要的。如果您正在做我认为您正在做的事情,那么您只需要出现在第一个冒号之前的内容(如果有的话)。 (除非你真的是指 group(1),我认为你不是。)这意味着你可以跳过正则表达式(因为你无论如何都要与 in 匹配) ,然后使用类似 name = name.split(':')[0]

的东西

关于python - 我怀疑 re.match 弄乱了控制流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7840784/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com