我有一个.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)之前选择所有内容并执行我需要它做的事情吗?
答案 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
使其成为多行,并且能够使用^
来匹配每行的乞讨。
答案 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])