-1

マークアップ言語で URL に一致するコード (有効である必要はありません) に取り組んでいます。単に URL をインポートするか、[ ] の間に追加することができます。いくつか例を挙げます:
1- http://en.wikipedia.org/wiki/Main_Page
2-[ http://en.wikipedia.org/wiki/Main_Page Title]
3-[ http://en.wikipedia. org/wiki/(Main_Page) Title]
4-( http://en.wikipedia.org/wiki/Main_Page )
5-[http://en.wikipedia.org/wiki/Main_Page]
3 つの正規表現が必要です。括弧内の URL (no. 2,3,5) 、括弧内にない URL 用 (1,4) 、および最初と 2 番目のすべての URL は簡単です。

notInside = '\]\s<>"'
notAtEnd = '\]\s\.:;,<>"\|\)'
regex = r'(?P<url>http[s]?://[^%(notInside)s]*?[^%(notAtEnd)s]' \
r'(?=[%(notAtEnd)s]*\'\')|http[s]?://[^%(notInside)s]*' \
r'[^%(notAtEnd)s])' % {'notInside': notInside, 'notAtEnd': notAtEnd}

しかし、問題は 3 番目のものから始まります。URL は 4 番のように括弧 (または角括弧以外) で始まります。正規表現は URL の末尾にある ")" と一致するべきではありませんが、最後に ")" を使用することがあります。 3 番目の正規表現に 2 つの別々の正規表現を記述して結果を結合することはできません。

もう 1 つ: フリー ソフトウェア コードであなたのヘルプを投稿します。よろしければ、あなたのコードを MIT ライセンスで公開します。ありがとうございました

4

1 に答える 1

1

説明

この正規表現は次のようになります。

  • 角かっこ内、丸かっこ内、およびかっこなしの文字列 URL に一致
  • ブラケットマッチの各タイプは、異なるキャプチャグループでキャプチャされます

\[(https?:\/\/(?:(?!\]).)*)\]|\((https?:\/\/(?:(?!\)).)*)\)|(https?:\/\/(?:(?!\s|$|\Z).)*)

ここに画像の説明を入力

実際の例: http://www.rubular.com/r/g7o1xdOGB5

サンプルテキスト

1-http://1en.wikipedia.org/wiki/Main_Page
2-[http://2en.wikipedia.org/wiki/Main_Page Title]
3-[http://3en.wikipedia.org/wiki/(Main_Page) Title]
4-(http://4en.wikipedia.org/wiki/Main_Page)
5-[http://5en.wikipedia.org/wiki/Main_Page]

マッチ

[0][0] = http://1en.wikipedia.org/wiki/Main_Page
[0][1] = 
[0][2] = 
[0][3] = http://1en.wikipedia.org/wiki/Main_Page

[1][0] = [http://2en.wikipedia.org/wiki/Main_Page Title]
[1][1] = http://2en.wikipedia.org/wiki/Main_Page Title
[1][2] = 
[1][3] = 

[2][0] = [http://3en.wikipedia.org/wiki/(Main_Page) Title]
[2][1] = http://3en.wikipedia.org/wiki/(Main_Page) Title
[2][2] = 
[2][3] = 

[3][0] = (http://4en.wikipedia.org/wiki/Main_Page)
[3][1] = 
[3][2] = http://4en.wikipedia.org/wiki/Main_Page
[3][3] = 

[4][0] = [http://5en.wikipedia.org/wiki/Main_Page]
[4][1] = http://5en.wikipedia.org/wiki/Main_Page
[4][2] = 
[4][3] = 

後読みがメディア ウィキでどの程度うまく機能するかはわかりませんが、これを試すことができます

(?<=\[)https?:\/\/(?:(?!\]).)*(?=\])|(?<=\()https?:\/\/(?:(?!\)).)*(?=\))|https?:\/\/(?:(?!\s|$|\Z).)*

ここに画像の説明を入力

同じサンプル テキストを指定すると、すべてのキャプチャがグループ 0 に配置されます。

実際の例: http://www.rubular.com/r/2o9aebq1OZ

ライセンスと無料使用

Stack Overflow ポリシーには次ように記載されています。

于 2013-07-18T20:43:55.200 に答える