Python3:回复sub随机工作

2024-10-02 20:35:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有多个文本块被这些html标记包围:

<code type="block" lexer="python"> my text </code>

最小工作示例

我需要用其他文本替换它们(在这里的最小示例中,是一个简单的字符串:“REPLACEMENT”)。我提供了两个示例块:一个被正确替换,另一个没有:我不明白为什么,它们似乎没有什么不同。我包括的测试

print(old_blockCode, "\n\n", new_blockCode, "\n_______", "\n\n")

让我觉得这个问题回复sub,但我不明白为什么。你知道吗

#!/usr/bin/python3
import re
fileContent = """<code type="block" lexer="python">import re
for old_code, new_code in zip(codes_list, highlighted_list):
pattern = re.sub(old_code, new_code, filecontent)
pattern.append(pa)</code>
<code type="block" lexer="python">import re
inputFile = "test"
outputFile = "testout"</code>
"""
blockCodes_list = []
blockHighlighted_list = []
blockCodes = re.finditer(r'<code type="block" lexer="python">(.*?)</code>', fileContent, flags=re.DOTALL)
for match in blockCodes:
    block = match.group(1)
    blockCodes_list.append(block)
    blockHighlighted = "REPLACEMENT"
    blockHighlighted_list.append(blockHighlighted)
newfileContent = fileContent
for old_blockCode, new_blockCode in zip(blockCodes_list, blockHighlighted_list):
    newfileContent = re.sub(old_blockCode, new_blockCode, newfileContent)       
    print(old_blockCode, "\n\n", new_blockCode, "\n_______", "\n\n")   
print(newfileContent)

预期产量

<code type="block" lexer="python">REPLACEMENT</code>
<code type="block" lexer="python">REPLACEMENT</code>

实际输出

<code type="block" lexer="python">import re
for old_code, new_code in zip(codes_list, highlighted_list):
pattern = re.sub(old_code, new_code, filecontent)
pattern.append(pa)</code>
<code type="block" lexer="python">REPLACEMENT</code>

Tags: inimportrenewfortypecodeblock
1条回答
网友
1楼 · 发布于 2024-10-02 20:35:53

它完全按照你的要求做了。您希望文本以<code…>标记开头,后跟一个anythings字符串,后跟</code>。它就是这么做的:

<code type="block" lexer="python">import re
for old_code, new_code in zip(codes_list, highlighted_list):
pattern = re.sub(old_code, new_code, filecontent)
pattern.append(pa)</code>
<code type="block" lexer="python">REPLACEMENT</code>

这是格言“不能用正则表达式解析XHTML”的特例。正则表达式根本无法匹配嵌套组。下面可能会有答案,他们说你可以用非贪婪限定符,但那是错误的。你知道吗

使用XML解析器。你知道吗

相关问题 更多 >