-1

我正在尝试用 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

我需要在这里做的是一举删除编号和点以及前导空格。但是我到底如何才能首先执行一个简单的变量扩展呢?

谢谢大家。

4

3 回答 3

3

如果保证你的文件格式和你说的一样:

1. Hello, World
2. Hello earth

你甚至不需要使用正则表达式,你可以使用splitand 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
于 2013-03-18T20:15:02.847 回答
2

正如其他人所说,您应该简单地使用匹配任何数字的正则表达式,例如r"\d"or 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)
于 2013-03-18T20:11:55.083 回答
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
于 2013-03-18T20:24:47.570 回答