簡體   English   中英

替換字符串中的多個模式(Markdown 文本)

[英]Replace Multiple Patterns in a String (Markdown Text)

我已經閱讀了很多關於這個主題的答案,但我確信我的答案有點不同,因為有多個模式搜索和替換。

例子:

names = {'1234': 'John Doe',
         '2345': 'Jane Smith',
         '3456': 'Marry Jones'
        }
        
message = '''![:Person](1234) ![:Person](2345) \nLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in ![:Person](3456) voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.'''

def markdown (msg):
    markdown_id = re.compile (r'(?<=\]\()\d+')  # Find 4 digit number
    result = re.sub (markdown_id, replace_name, msg)
    return result
    
def replace_name (matchobj):
    # print (matchobj)
    if matchobj.group (0) in names:
        return names [matchobj.group (0)]
        

markdown (message)
'![:Person](John Doe) ![:Person](Jane Smith) \nLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in ![:Person](Marry Jones) voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

我想替換整個字符串

'![:Person](1234) ![:Person](2345) \nLorem...'

'John Doe Jane Smith \nLorem...'

解決方案是通過替換使用嵌套的正則表達式組

markdown_id = re.compile (r'(?<=\]\()\d+')

markdown_id = re.compile(r'(!\[:\w+\]\((\d+)\))')

第一組在哪里

![:Person](1234)

第二組只是與該人相關的 4 位數字。

接下來,我將replace_name函數更改為:

def replace_name (matchobj):
    print (matchobj.group (1), matchobj.group (2))
    if matchobj.group (2) in names:
        return names [matchobj.group (2)]

結果是我想要的:

>>> markdown(message)
![:Person](1234) 1234
![:Person](2345) 2345
![:Person](3456) 3456
'John Doe Jane Smith \nLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in Marry Jones voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM