我正在尝试将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(在$ ReturnedRegExImageData中的$ Image)这一行: 我已经尝试了在ReturnedRegExData中使用Image和从0到len的for循环(ReturnedRegExData),但是它们不返回有效数据。我知道Python应该是简单的编码,但我很难处理它。
我已经阅读了.match,/ search和.findall的类似帖子,他们都会查看搜索部分,但没有任何内容可以解决如何以有用的格式获得结果的问题。我查看了手册,但我也很难解读它。
如何返回找到的结果,无论是返回0,还是1或更多结果。 0应该由if语句覆盖。
感谢您提供的任何帮助。
Ĵ
答案 0 :(得分:1)
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.
请注意,使用$来启动变量名称无效;
In [3]: $foo = 12
File "<ipython-input-3-38be62380e9f>", line 1
$foo = 12
^
SyntaxError: invalid syntax
如果要替换部分已找到的网址,可以使用sub()
方法。它使用MatchObject
。下面是我自己的一个脚本的示例。我用它来改变,例如<img alt='pic' class="align-left" src="static/test.jpg" />
至<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)