簡體   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