现在已经挣扎了一段时间了 - 我根本无法绕过它。
鉴于以下字符串变体:
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'}
干杯!
答案 0 :(得分:3)
在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': ''}
答案 1 :(得分:1)
你可以使用这样的正则表达式:
(.+?)(http.*)?$
<强> Working demo 强>
正如你所看到的那样,并没有完全实现你想要的情况:
some text - http://a.link.to/something
因为它产生:
{'text': 'some text - ', 'link': 'http://a.link.to/something'}
^--- Dash here
但你可以对文字进行预先或后期清理。
我发布了答案,因为它可能对你有帮助。