我正在尝试用Python编写一个脚本,它“清理”一些文件馈送文本,如下所示:
for i in range(1,10):
number = 1
cleanText = re.sub('number.','',line).strip()
number = number + 1
print cleanText
示例文件将是:1。Hello,World 2. Hello earth
我需要做的是一举删除编号和点以及前导空格。但是我怎么能首先进行简单的变量扩展呢?
提前谢谢大家。
答案 0 :(得分:3)
如果您的文件格式保证与您说的一样:
1. Hello, World
2. Hello earth
您甚至不需要使用正则表达式,只需使用split
和join
:
clean_line = ' '.join(line.split(' ')[1:]).lstrip()
>>> ' '.join("1. Hello, world".split(' ')[1:])
'Hello, world'
或者,如果您仍想进行替换,则此基于replace
的代码可能有效:
number = 1
for line in file_handle:
clean_line = line.replace("%d. " % number, "").lstrip()
number += 1
答案 1 :(得分:2)
正如其他人所说,您应该只使用与任何数字匹配的正则表达式,例如r"\d"
或r"\d+"
。但是,出于学习目的,以下是您所要求的答案。
“变量扩展”的最接近有用的等价物是字符串格式化运算符:
cleanText = re.sub('%d.' % number, line).strip()
您也可以使用str(number) + '.'
来达到同样的效果。您的代码还有其他几个问题:
你的循环错了;如果您在range(1, 10)
上进行迭代,则无需手动增加number
。
你可能意味着range(1, 11)
。
.
匹配任何字符;你想要\.
。
清理后的版本可能如下所示:
cleanText = line.strip()
for i in xrange(1, 11):
cleanText = re.sub(r'%d\.', '' , cleanText)
答案 2 :(得分:0)
import re
fp = open('line','r')
for line in fp:
pattern = re.match(r'[0-9]*\.(.*)',line)
if pattern:
print pattern.group(1)
else:
print line