假设我有这些文字:
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.
是否可以使用notepad ++来实现更长的文本和列表?或者我可以使用其他任何技术吗?
答案 0 :(得分:0)
您可以尝试连续三次正则表达式替换:
<强>查找强>
([^?]*)?\?(.*)
<强>替换强>
$1apple$2
这里的诀窍是([^?]*)?\?
匹配第一个问号之前的所有内容。这允许我们一次只能控制替换一个?
占位符。
然后,您将从左到右重复上述替换,以获得其他两个关键字。
答案 1 :(得分:0)
这个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)
不可否认,还有更好的方法,例如不将整个文件加载到字符串中。
答案 2 :(得分:0)
您可以使用以下正则表达式:
\?(?!(.|\s)*\?(.|\s)*)
它将选择最后 ?
并为您提供索引。之后你可以用数组的最后一个元素替换它(如果你创建一个包含["apple", "banana", "cherry"]
的堆栈会更好,这样stack.pop
方法总会给你最后一个元素。)
答案 3 :(得分:0)
Perl:
$text =~ s{\?}{shift @fruits}eg; # Consumes @fruits array
或者
my $i = 0;
$text =~ s{\?}{$fruits[$i++]}g; # Preserves @fruits
要循环@fruits
(如果?
的数量超过水果数量):
my $i = 0;
$text =~ s{\?}{$fruits[ $i++ % @fruits ]}g;