我正在使用标记语言编写代码匹配URL(无需有效),您只需导入URL或者可以在[]之间添加它。我举几个例子:
1 - http://en.wikipedia.org/wiki/Main_Page
2 - [http://en.wikipedia.org/wiki/Main_Page标题]
3 - [http://en.wikipedia.org/wiki/(Main_Page)标题]
4 - (http://en.wikipedia.org/wiki/Main_Page)
5- [http://en.wikipedia.org/wiki/Main_Page]
我需要三个正则表达式,一个用于括号中的URL(编号2,3,5),另一个用于不在括号(1,4)中的URL和一个用于所有这些的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}
但是问题从第三个问题开始,一个URL以括号开头(或者除括号之外的任何东西),例如数字4,正则表达式不应该与URL末尾的“)”相匹配,但有时人们使用“)”在URL的末尾并放入括号中,正则表达式必须匹配这个“)”,就像数字3.我不能为第三个写单独的正则表达式并结合结果
另一件事:我会在免费软件代码中发布您的帮助,所以请说明我没有在MIT许可证中发布您的代码。谢谢
答案 0 :(得分:1)
这个正则表达式将:
\[(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政策说明:在cc-wiki下使用attribution required
许可的用户贡献