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