Java 从列表中迭代查找和替换文本

Java 从列表中迭代查找和替换文本,java,python,regex,perl,notepad++,Java,Python,Regex,Perl,Notepad++,假设我有这些文本: Donec sollicitudin ? malesuada. "Curabitur" arcu erat, accumsan id imperdiet et, porttitor at sem. Quisque velit nisi, ? ut lacinia in, ? id enim. Proin eget tortor risus. 我在列表中列出了这些文本: ["apple", "banana", "cherry"] 如何替换每次出现的错误?列表中的每一个文本?

假设我有这些文本:

Donec sollicitudin ? malesuada. "Curabitur" arcu erat, accumsan
id imperdiet et, porttitor at sem. Quisque velit nisi, ? ut
lacinia in, ? id enim. Proin eget tortor risus.
我在列表中列出了这些文本:

["apple", "banana", "cherry"]
如何替换每次出现的错误?列表中的每一个文本?预期产出:

Donec sollicitudin apple malesuada. "Curabitur" arcu erat, accumsan
id imperdiet et, porttitor at sem. Quisque velit nisi, banana ut
lacinia in, cherry id enim. Proin eget tortor risus.

有没有可能使用记事本++来实现这样长的文本和列表?或者我还可以使用其他技术吗?

您可以尝试连续进行三次正则表达式替换:

查找:

([^?]*)?\?(.*)
$1apple$2
替换:

([^?]*)?\?(.*)
$1apple$2
这里的技巧是,
([^?]*)?\?
匹配所有内容,直到第一个问号。这允许我们一次仅对一个
占位符进行受控替换


然后,您将对其他两个关键字从左到右重复上述替换操作。

此Python脚本将完成任务。如果列表中替换的
多于,则将其保留为

import re

replacements = ["apple", "banana", "cherry"]
lines = ""

with open("file.txt") as file:
    lines = file.read()

def replace(m):
    if not replacements:
        return "?"

    return replacements.pop(0)

lines = re.sub(r"\?", replace, lines)

with open("file.txt", "w") as file:
    file.write(lines)

诚然,有更好的方法可以做到这一点,例如不将整个文件加载到字符串中。

您可以使用下面的正则表达式:

\?(?!(.|\s)*\?(.|\s)*)
它将选择最后一个
并为您提供索引。之后,您可以用数组的最后一个元素替换它(最好创建一个包含
[“apple”、“banana”、“cherry”]
的堆栈,这样
stack.pop
方法将始终为您提供最后一个元素)。

在Perl中:

$text =~ s{\?}{shift @fruits}eg;  # Consumes @fruits array

要循环使用
@水果
(如果
s的数量超过水果的数量):


您可以编写脚本或编写简单的程序。谢谢,但本文只是一个示例。。我可能有成百上千的替代品,只是害怕一个接一个的替换会出错。。如果没有其他办法,我会这样做。@Mrye那么您可能需要用Java或Perl之类的语言编写一个脚本来处理这个问题。记事本++只能做这么多。谢谢,它正在工作。。我尽量避免编写脚本,但没关系