3

PowershellスクリプトをPythonスクリプトに変換しようとしています。grepとcurlを使いやすくするためにシェルスクリプトを使用するつもりでしたが、ifステートメントを使いやすくするためにPythonを使用することにしました。これは私が変換しようとしている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と0からlen(ReturnedRegExData)までのforループですが、有効なデータを返しません。Pythonは単純なコーディングであるはずですが、私はそれを処理するのに非常に苦労しています。

.match、/ search、.findallの同様の投稿を読みましたが、それらはすべて検索部分を調べていますが、有用な形式で結果を取得する方法については何も説明していません。マニュアルを読みましたが、それも解読するのに苦労しています。

0、1、またはそれ以上の結果を返すかどうかにかかわらず、findallが検出した結果をどのように実行できますか。0ifステートメントでカバーする必要があります。

あなたが提供できるどんな助けにも感謝します。

J

4

1 に答える 1

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.

$を使用して変数名を開始することは有効なPythonではないことに注意してください。

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

見つかったURLの一部を置き換える場合は、メソッドを使用できますsub()。を使用しMatchObjectます。以下は、私自身のスクリプトの1つからの例です。私はそれを例えばに変更するために使用し<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)
于 2012-12-23T16:12:04.870 に答える