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

2024-10-02 20:42:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Perl示例,当我在Python中尝试同样的任务时,它看起来异常混乱和低效。对Python工作有更好理解的人能否评论一下如何简化Python snip,使其在简单性和编码上更类似于Perl示例?这两个snip(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

Tags: tore重点示例编码searchexample评论
3条回答

发布的问题没有提供足够的问题详细信息

也许下面的代码片段应该是一个解决方案


#!/usr/bin/env python3.7
#
# vim: ai ts=4 sw=4

import re

str = '''
192.168.0.12 server_1 room_1
192.168.0.14 server_2 room_2
192.168.0.16X server_3 room_3
192.168.0.18x server_4 room_4
192.168.0.32 server_5 room_5
'''

m = re.findall(r"^([\d\.]+)[xX]", str, re.MULTILINE)
print(m)

for ip in m:
    print(ip)

输出

['192.168.0.16', '192.168.0.18']
192.168.0.16
192.168.0.18

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

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

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

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

但是,您必须进一步缩进else中的所有内容

“walrus”操作符:=就是为了这类事情而添加到Python中的

==已编辑。==

我在3.8代码和<;3.8守则。后者应该是普通赋值运算符'='

记住在变量中搜索的结果:

match = re.search(r"^([0-9\.]+)[Xx]$",teststring)
if match:
    ExtractedVa=float(match.group(1)) # Convert from string to numeric

相关问题 更多 >