2016-05-18 12 views
1

urlからUUIDを抽出したい。例えばURLからuuidを抽出

/ポスト/ eb8c6d25-8784-4cdf-b016-4d8f6df64a62 mc_cid = 37387dcb5f & mc_eid = 787bbeceb2
/ポスト/ d78fa5da-4cbb-43b5-9fae-2b5c86f883cb/UID /? 7034
/ポスト/ 5ff0021c-16cd-4f66-8881-ee28197ed1cf

私は、文字列のこの種の何千ものを持っています。

私の正規表現は、今私にこのような結果与え".*\/posts\/(.*)[/?]+.*" です:

d78fa5da-4cbb-43b5-9fae-2b5c86f883cb/UID

UID/84ba0472-926d-4f50-b3c6-46376b2fe9deを
f5e5dc6a-f42b-47d1-8ab1-6ae533415d24
f5e5dc6a-f42b-47d1-8ab1-6ae533415d24
f7842dce-73a3-4984-bbb0-21d7ebce1749
UID/6f3c97c1-b877-40e0-9479-6bdb826b7b8ffdc6c48f-b124-447d-b4fc-bb528abb8e24

あなたが見ることができるように、私の正規表現は/uidを取り除くが、?xxxx、クエリパラメータ、細かい処理することはできません。

私は何を欠席しましたか?それを正しくするには?

おかげ

+0

まず検索を試しましたか? http://stackoverflow.com/questions/136505/searching-for-uuids-in-text-with-regex and http://stackoverflow.com/questions/7905929/how-to-test-valid-uuid-guid – fukanchik

+0

良い指針。間違ったキーワードを検索しました。 @fukanchik –

答えて

3

.*パターンはUUIDのため広すぎると貪欲です:

>>> import re 
>>> data = """ 
... /posts/eb8c6d25-8784-4cdf-b016-4d8f6df64a62?mc_cid=37387dcb5f&mc_eid=787bbeceb2 
... /posts/d78fa5da-4cbb-43b5-9fae-2b5c86f883cb/uid/7034 
... /posts/5ff0021c-16cd-4f66-8881-ee28197ed1cf 
... """ 
>>> 
>>> re.findall(r"/posts/([A-Za-z0-9\-]+)", data) 
['eb8c6d25-8784-4cdf-b016-4d8f6df64a62', 
'd78fa5da-4cbb-43b5-9fae-2b5c86f883cb', 
'5ff0021c-16cd-4f66-8881-ee28197ed1cf'] 

それとも、あなたは、UUID形式の詳細厳しいことが多くを見ることができます:

+0

ありがとう!あなたの説明のためにポイント –

2

正規表現は、できるだけ多くの文字を一致させようとします(非公式に「最大マンク」と呼ばれます)。何が続く一つ以上の/?に続くものが続く/posts/続い

マッチ何でも、、、:

あなたの正規表現.*\/posts\/(.*)[/?]+.*の平易な英語の説明は次のようになります。

私たちは、このテキストにその正規表現を適用します。

.../posts/d78fa5da-4cbb-43b5-9fae-2b5c86f883cb/uid/7034

...残り/7034の部分がまだあるので、これは、...

d78fa5da-4cbb-43b5-9fae-2b5c86f883cb/uid

:最大ムンクのルールは、したがって、それはあなたが望んでいたよりも多くのマッチング終わる、第二の「何」マッチができるだけ長くなることを要求します正規表現の残りの部分と一致します。

これを修正する最良の方法は、という正規表現を使用することです(実際には@alecxeのように)。

+0

にまっすぐにまっすぐに! –

関連する問題