难以理解如何正确地将 Perl 匹配转换为 Python

Ste*_*hit 3 python perl

我有一个 Perl 示例,当我在 Python 中尝试相同的任务时,它看起来异常混乱且效率低下。可以更好地掌握 Python 工作的人评论如何简化 python 片段,使其在简单性和编码绒毛方面更类似于 Perl 示例吗?这两个片段(Perl 和 Python)产生相同的结果。重点是测试然后提取括号内的正则表达式。Python 案例似乎需要对正则表达式进行两次处理。


#Perl Example:
   elsif ($teststring =~ m/^([0-9\.]+)[Xx]$/)
   {
      $ExtractedVa = $1;
   }
Run Code Online (Sandbox Code Playgroud)
#Python Example of how to implement the perl functionality above:
    elif (re.search(r"^([0-9\.]+)[Xx]$",teststring)):  
        parts=re.search(r"^([0-9\.]+)[Xx]$",teststring)
        ExtractedVa=float(parts.group(1)) # Convert from string to numeric
Run Code Online (Sandbox Code Playgroud)

Fra*_*lin 5

如果您使用的是 Python 3.8 或更高版本,

elif parts := re.search(....., teststring):
Run Code Online (Sandbox Code Playgroud)

如果你没有达到 3.8,那么你只需做出两个声明:

else:
    parts = re.search(....., teststring)
    if parts:
Run Code Online (Sandbox Code Playgroud)

但是你必须进一步缩进else.

“海象”运算符:=被添加到 Python 中只是为了这种事情。

== 编辑。==

我不小心:=在3.8代码和<3.8代码中都使用了。后者应该是正常的赋值运算符 '='

  • @StepAndFetchit 如果此答案[解决了您的问题](https://stackoverflow.com/help/someone-answers),请考虑通过单击[接受它](https://meta.stackexchange.com/questions/5234)答案左侧的复选标记/勾号,将其变为绿色。这标志着问题已得到您满意的解决,并向您和回答者授予[声誉](https://stackoverflow.com/help/whats-reputation)。一旦您的声誉点 &gt;= 15,您也可以根据需要对答案进行投票。也没有义务这样做。 (2认同)