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之类的语言编写一个脚本来处理这个问题。记事本++只能做这么多。谢谢,它正在工作。。我尽量避免编写脚本,但没关系