正则表达式 - 增量替换
有没有办法只用正则表达式来进行整数的递增替换呢?
这里有个问题,我有一个文本文件,里面有 1,000,000 行,所有行的开头都是 %。
我想用正则表达式把 # 替换成递增的整数。
input:
% line one
% line two
% line three
...
output:
1 line one
2 line two
3 line three
...
8 个回答
4
虽然这个问题最好是通过逐行读取文件,然后用简单的字符串函数检查每一行的第一个字符来解决,但下面是如何在Java中对字符串进行增量替换的方法:
Pattern p = Pattern.compile("^%");
Matcher m = p.matcher(text);
StringBuffer sb = new StringBuffer();
int i = 0;
while (m.find()) {
m.appendReplacement(sb, String.valueOf(i++));
}
m.appendTail(sb);
return sb.toString();
4
这里有一种在Python中实现的方法
import re
from itertools import count
s="""
% line one
% line two
% line three"""
def f():
n=count(1)
def inner(m):
return str(next(n))
return inner
new_s = re.sub("%",f(),s)
另外,你也可以在这里使用一个叫做lambda的函数,像这样:
new_s = re.sub("%",lambda m,n=count(1):str(next(n)),s)
不过其实完全不使用正则表达式会更简单、更好
from __future__ import print_function # For Python<3
import fileinput
f=fileinput.FileInput("file.txt", inplace=1)
for i,line in enumerate(f):
print ("{0}{1}".format(i, line[1:]), end="")
因为所有的行都是以“%”开头,所以根本不需要去看第一个字符
5
当然可以!请看下面的内容:
在编程中,有时候我们需要让程序做一些重复的事情,比如计算、处理数据等等。为了让程序更高效,我们可以使用循环。循环就像是一个指令,让程序不停地重复执行某些操作,直到满足特定条件为止。
比如说,如果我们想要计算从1加到10的总和,我们可以用循环来实现。程序会从1开始,加到10,每加一个数字就把结果更新,最后得到的就是1到10的总和。
循环有很多种类型,比如“for循环”和“while循环”。“for循环”通常用于已知次数的重复,而“while循环”则是在不知道具体次数的情况下使用,直到某个条件不再满足为止。
使用循环可以让我们的代码更简洁,也能减少出错的机会,因为我们不需要手动写很多重复的代码。
希望这个解释能帮助你更好地理解循环的概念!
n = 1
with open('sourcefile.txt') as input:
with open('destination.txt', 'w') as output:
for line in input:
if line.startswith('%'):
line = str(n) + line[1:]
n += 1
output.write(line)