繁体   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