我的目标是用相应的数字项目符号替换列表标记中的所有字号。例如,使用以下输入:
<list>one goto school two do play three comeback <!list>
我需要以下输出,但匹配应在列表末尾停止:
<list>xx. goto school
|NEWLIN xx. do play
|NEWLIN xx. comeback
<!list>
regular expression suggested in the answer(也复制到下面)解决了这个问题,但并没有在列表末尾停止匹配。你知道吗
((?<=\<list\>)|(?<=\|NEWLIN ))(one|two|three|four|five|six|seven|eight|nine)
我建议将
<list>
和<!list>
之间的块与(?s)<list>.*?<!list>
匹配,然后在这些特定位置替换所需的块。你知道吗下面是一个可以进一步改进的示例解决方案:
参见Python demo
详细信息:
(?s)<list>.*?<!list>
正则表达式匹配<list>
,然后匹配任何0+字符(因为(?s)
修饰符允许.
匹配任何字符,包括换行符),然后匹配<!list>
re.sub
中,传递回调repl
方法,处理匹配对象repl
方法中,定义了包含必要替换项的字典,使用键创建一个带有替换项和两个lookbehind的正则表达式(这可以很容易地更改为捕获组,但代码会增长一点点)。在re.sub
中,lambda作为替换传递,它允许我们使用匹配值来获取正确的字典值。你知道吗相关问题 更多 >
编程相关推荐