Python正则表达式在各种条件下匹配子字符串

2024-05-16 10:23:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经为这件事挣扎了一段时间了——我简直无法用脑子去想它

给定以下字符串变体:

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

我正在寻找一个正则表达式,它将产生以下内容:

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

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

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

干杯


Tags: to字符串texthttplinksome变体something
2条回答

您可以这样使用正则表达式:

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

Working demo

enter image description here

如您所见,在以下情况下,没有完全实现您的目标:

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

因为它产生:

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

但是你可以对文本进行前清理或后清理

我把答案贴出来是因为它可能对你有帮助

在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': ''}

相关问题 更多 >