0

私はこの種の文字列を持っています:

string = '
something .... something else ...
url="/transfer/packages/00000000-0000-0000-0000-000000000000/connectors/68f74d66-ca3d-4272-9b59-4f737946b3f7/something/138bb190-3b12-4855-88e2-0d1cdf46aeb5/...../...../...../...../...."
other things ...
'

CR/LF がなければ、すべてが 1 行に表示されます。

次のような正規表現を作成したい:

  • URLがで始まる場合のみ/transfer/packages/
  • 後続の各 GUID をキャプチャします
  • 引用符で囲まれた文字列の終わりまで"
  • 検出される GUID の数は不明であり、少なくとも 1 つである

これまで私は書いた:

\/transfer\/packages\/[^"]*([A-Za-z0-9]{8}-[A-Za-z0-9]{4}-[A-Za-z0-9]{4}-[A-Za-z0-9]{4}-[A-Za-z0-9]{12})"

ただし、LAST GUID のみをキャプチャします。/transfer/packages/プレフィックスを再利用し、プレフィックスから移動することなく、検索を毎回熱心に拡張してマッチングを維持する方法が必要です。

4

3 に答える 3

2

rePython でモジュールを使用している場合は、以下を使用str.startwithしてみてください。

import re
url="/transfer/packages/00000000-0000-0000-0000-000000000000/connectors/68f74d66-ca3d-4272-9b59-4f737946b3f7/something/138bb190-3b12-4855-88e2-0d1cdf46aeb5/...../...../...../...../...."
if url.startswith('/transfer/packages/'):
    Guid_List = re.findall(r'(?i)[a-z0-9]{8}(?:-[a-z0-9]{4}){3}-[a-z0-9]{12}', url)
print(Guid_List)
于 2020-04-15T12:35:24.757 に答える
1

このSOの回答から:

2 番目の質問については、よくある問題です。PCRE 正規表現を使用して任意の数のキャプチャを取得することはできません。これは、キャプチャが繰り返される場合、最後にキャプチャされた値のみがグループ バッファーに格納されるためです。結果の配列に、正規表現パターン内のキャプチャ グループの数より多くのサブマッチを含めることはできません。詳細については、キャプチャ グループの繰り返しと繰り返しグループのキャプチャを参照してください。

于 2020-04-15T11:12:59.770 に答える