[英]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.