如何使用正则表达式找到的表达式替换文本?

时间:2014-08-29 20:52:51

标签: python regex grep

我有一个.txt文件,其中包含以下几行(数百个):

AAIT    AC Asia Information Tech MSCI Ishares
AAL     American Airlines Group Inc.
AAME    Atlantic American Corp
AAOI    Applied Optoelectronics Inc
AAON    Aaon Inc

我想用以下代码替换这些行:

1.AAIT
2.AAL
3.AAME
4.AAOI
5.AAON

我怎么能用grep,python或任何程序正则表达式兼容?对我来说重要的是学习如何使用"找到的表达式"替换语句中的变量。

例如,我希望正则表达式选择AAIT,将其存储到变量中,删除第1行并使用变量将1.AAIT写入第1行,依此类推。是否可以使用正则表达式兼容的程序(如grep)来执行此操作,还是必须使用python等编程语言?如果你必须使用python你可以给我一个关于要使用的函数和库的提示,这将使我能够遍历所有行,在分隔符(tab)之前选择所有内容并执行我需要它做的事情吗?

5 个答案:

答案 0 :(得分:2)

如果您可以使用awk,那么它将是:

awk '{print NR"."$1}' file
1.AAIT
2.AAL
3.AAME
4.AAOI
5.AAON

答案 1 :(得分:1)

试试这个

import re

str = """ AAIT    AC Asia Information Tech MSCI Ishares
AAL     American Airlines Group Inc.
AAME    Atlantic American Corp
AAOI    Applied Optoelectronics Inc
AAON    Aaon Inc """

match = re.findall(r'^(\w+)\b', str, re.MULTILINE)

print match ##['AAL', 'AAME', 'AAOI', 'AAON']

http://regex101.com/r/oO5wE0/1

无法获取python fiddle来保存文件,但您可以插入该代码并且它可以正常工作。

答案 2 :(得分:0)

如下:

/^((?:AAIT|AAL|AAME|AAOI|AAON)(?:.*))/gm

使用修饰符m使其成为多行,并且能够使用^来匹配每行的乞讨。

http://regex101.com/r/fD3yG9/1

答案 3 :(得分:0)

尝试

^(.*?)\b.*$

或以您使用的语言标记单词边界的任何内容

答案 4 :(得分:0)

python版本......这需要在调用脚本时将文件名作为参数。

import sys
fname = sys.argv[1]
with open(fname,'rU') as fstream:
    for num,line in enumerate(fstream):
        # assumes tab between the ticker symbol and the rest
        # if not, use "  " instead of "\t"
        vals = line.split("\t")  
        print "{0}.{1}".format(num+1,vals[0])