繁体   English   中英

Python RegEx在各种条件下匹配子字符串

[英]Python RegEx matching substrings on various conditions

现在已经为此苦苦挣扎了一段时间-我简直无法绕开它。

给定以下字符串变体:

some text
some text http://a.link.to/something
some text - http://a.link.to/something
some text: http://a.link.to/something
http://a.link.to/something

我正在寻找将产生以下内容的RegEx:

{'text': 'some text',
 'link': ''}

{'text': 'some text',
 'link': 'http://a.link.to/something'}

{'text': '',
 'link': 'http://a.link.to/something'}

干杯!

在re.match函数中使用命名的捕获组,以便可以使用用户定义的键创建字典。

>>> s = '''some text
some text http://a.link.to/something
some text - http://a.link.to/something
some text: http://a.link.to/something
http://a.link.to/something'''
>>> for i in s.split('\n'):
        re.match(r'(?P<text>(?:(?!http://).)*?)\W*\b(?P<link>http://.*)?$', i).groupdict()


{'link': None, 'text': 'some text'}
{'link': 'http://a.link.to/something', 'text': 'some text'}
{'link': 'http://a.link.to/something', 'text': 'some text'}
{'link': 'http://a.link.to/something', 'text': 'some text'}
{'link': 'http://a.link.to/something', 'text': ''}

您可以使用以下正则表达式:

(.+?)(http.*)?$

工作演示

在此处输入图片说明

如您所见,在以下情况下,您并未完全实现所需的功能:

some text - http://a.link.to/something

由于它生成:

{'text': 'some text - ',  'link': 'http://a.link.to/something'}
                    ^--- Dash here

但是您可以对文本进行事前或事后清理。

我正在发布答案,因为它可能会对您有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM