使用正则表达式在 Python 中编辑列表不起作用



我目前正在尝试编辑我创建的列表,它看起来像这样:

['n//POINTER #1 @ $3BA4 - STRING #1 @ $3DD3n#W32($3BA4)n・All enemies defeated[END-FE]', 'n//POINTER #2 @ $3BA8 - STRING #2 @ $3DECn#W32($3BA8)n・Follower dies[NLINE]n・All party members die[END-FE]', 'n//POINTER #3 @ $3BAC - STRING #3 @ $3E17n#W32($3BAC)n・Follower dies[NLINE]n・All party members die[END-FE]', 'n//POINTER #4 @ $3BB0 - STRING #4 @ $3E42n#W32($3BB0)n・All party members die[END-FE]']

现在我想"查找并替换";每个列表项中的字符串如下:

//POINTER #X @ $XXXX - STRING #X @ $XXXXn

我尝试了以下代码,根据regex101,它应该可以找到所有regex项,但不能替换它们:

import re
engfile_chunks = [<list above>]
engfile_chunks_new = [re.sub(r'(\n//POINTER).+?(?=\n)', '', chunks) for chunks in engfile_chunks]

有人知道为什么它不起作用吗?

您匹配的是文字字符串n(一个反斜杠,然后是n(,而不是换行符。在您的情况下,您实际上不需要regex的原始字符串,所以您可以将其作为常规字符串并使用一个反斜杠。然后,Python将插入一个换行符,它就会工作:

import re
engfile_chunks = [
"n//POINTER #1 @ $3BA4 - STRING #1 @ $3DD3n#W32($3BA4)n・All enemies defeated[END-FE]",
"n//POINTER #2 @ $3BA8 - STRING #2 @ $3DECn#W32($3BA8)n・Follower dies[NLINE]n・All party members die[END-FE]",
"n//POINTER #3 @ $3BAC - STRING #3 @ $3E17n#W32($3BAC)n・Follower dies[NLINE]n・All party members die[END-FE]",
"n//POINTER #4 @ $3BB0 - STRING #4 @ $3E42n#W32($3BB0)n・All party members die[END-FE]",
]
engfile_chunks_new = [re.sub("(n//POINTER).+?(?=n)", "", chunks) for chunks in engfile_chunks]

最新更新