Python正则表达式中的变量扩展

时间:2013-03-18 20:01:59

标签: python regex formatting variable-expansion

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

我需要做的是一举删除编号和点以及前导空格。但是我怎么能首先进行简单的变量扩展呢?

提前谢谢大家。

3 个答案:

答案 0 :(得分:3)

如果您的文件格式保证与您说的一样:

1. Hello, World
2. Hello earth

您甚至不需要使用正则表达式,只需使用splitjoin

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