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

标签 python perl

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


#Perl Example:
   elsif ($teststring =~ m/^([0-9\.]+)[Xx]$/)
   {
      $ExtractedVa = $1;
   }
#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

最佳答案

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

elif parts := re.search(....., teststring):

如果你没有达到 3.8,那么你只需做两个陈述:

else:
    parts = re.search(....., teststring)
    if parts:

但是你必须进一步缩进 else 中的所有内容。

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

== 已编辑。 ==

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

关于python - 难以理解如何正确地将 Perl 匹配转换为 Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64792455/

相关文章:

python - 为另一个数组中的每个元素向量化查找数组中最接近的值

perl - 使用 Regexp::Grammars (*COMMIT) 做什么?

perl - 如何使用 for...each 循环重置多个 Perl 散列?

perl - 带括号和不带括号的 Perl 子声明有什么区别?

python - 在 zip 存档 python 中创建文件

python - 如何使用同一字典的另一个键设置字典值

当函数采用非平凡参数时,通过 SWIG 使用 python 进行 C++ 回调?

python - GAE python 字符串相等 - unicode 的奇怪行为

perl - Sybase::CTlib 的 ct_results() 和 ct_cmd_drop() 错误

json - WWW::Mechanize 不喜欢 POST json