繁体   English   中英

将脚本从Powershell转换为Python-Regex不能按预期工作

[英]Converting Script from Powershell to Python-Regex Not Working as Expected

我正在尝试将Powershell脚本转换为python脚本。 我打算使用一个Shell脚本来简化grep和curl的使用,但我决定使用python来简化if语句。 这是我想要转换的Powershell代码:

Powershell代码(效果很好):

$ReturnedRegExData = SearchStringAll -StringToSearch $Data -RegEx $ImgURLRegex 

if ($ReturnedRegExData) #Check Existance of Matches
{
    foreach ($Image in $ReturnedRegExImageData) #Run Through all Matches
    #Can then get the result from the group of results and run through them 1 at a time via $Image
}
else
{
    #exit
}

这是我对Python的尝试,而不是太好用

ReturnedRegExData = re.findall($ImgURLRegex , $Data)

if ReturnedRegExImageData: #Check existance of Matches (Works)
    print "found"
else:
    sys.stderr.write("Error finding Regex \r\n")
    return

$For Loop running through results

re.search使用了这个打印版本ReturnedRegExImageData.group(0),但是我想找到所有的匹配,并且非常难以复制foreach($ Retur in $ ReturnedRegExImageData)这一行:我已经尝试过乱用图像了ReturnedRegExData和for循环从0到len(ReturnedRegExData),但它们不返回有效数据。 我知道Python应该是简单的编码,但我很难处理它。

我已经阅读了.match,/ search和.findall的类似帖子,它们都遍布搜索部分,但没有什么可以解决如何以有用的格式获得结果。 我查看了手册,但我也很难解读它。

如何返回找到的结果,无论是返回0,还是1或更多结果。 0应该由if语句覆盖。

感谢您的任何帮助,您可以提供。

Ĵ

findall函数返回一个字符串列表。 所以你可以这样做:

found = re.findall(img_url_regex, data)
if not found: # the list is empty
    sys.stderr.write("Error finding Regex \r\n")
else:
    for imgurl in found:
        print 'Found image:', imgurl
        # whatever else you want to do with the URL.

注意,使用$来启动变量名是无效的python;

In [3]: $foo = 12
  File "<ipython-input-3-38be62380e9f>", line 1
    $foo = 12
    ^
SyntaxError: invalid syntax

如果要替换部分已找到的URL,可以使用sub()方法。 它使用MatchObject 下面是我自己的一个脚本的示例。 我用它来改变例如<img alt='pic' class="align-left" src="static/test.jpg" /> to <img alt='pic' class="align-left" src="static/images/test.jpg" />

with open(filename, 'r') as f:
    data = f.read()
# fix image links
img = re.compile(r'src="[\./]*static/([^"]*)"')
data = img.sub(lambda m: (r'src="' + prefix + 'static/images/' + 
                          m.group(1) + r'"'), data)
with open(filename, 'w+') as of:
    of.write(data)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM