【问题标题】:How to replace a text using the found expression with regex?如何使用找到的表达式用正则表达式替换文本?
【发布时间】:2014-08-29 20:52:51
【问题描述】:

我有一个 .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,您能否给我一个关于要使用的函数和库的提示,这将使我能够循环浏览所有行,选择分隔符(制表符)之前的所有内容并执行我需要它执行的操作?

【问题讨论】:

  • 或者编写任何代码怎么样?!
  • /^(\w*?)\s/m 并使用捕获$1
  • @thomas:$1 是什么意思?

标签: python regex grep


【解决方案1】:

如果你可以使用awk,那就是:

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

【讨论】:

  • 甜蜜它可以与 cygwin awk 一起使用,但是如何直接打印到文件而不是 shell 响应?
  • 要将命令的输出保存到文件中,请将> myoutputfile.txt 附加到命令中
【解决方案2】:

试试这个

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 保存文件,但您可以插入该代码,它会工作。

【讨论】:

    【解决方案3】:

    比如:

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

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

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

    【讨论】:

    • 问题是您手动输入所有名称,但我的文件包含数百行
    • @Wicelo 所以你想从第一行打印到最后一行。我可以提供一个 awk 解决方案吗?
    • @Avinash Raj : 如果 awk 可以在 windows 下使用,那么!
    • @Wicelo 你有gnu awk 用于windows。 gnuwin32.sourceforge.net/packages/gawk.htm
    • 对不起,我不了解 Windows。您可以简单地在 awk 中执行此操作。请参阅 jotne 的回答。
    【解决方案4】:

    试试

    ^(.*?)\b.*$
    

    或任何标记您正在使用的语言中的单词边界的东西

    【讨论】:

      【解决方案5】:

      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])
      

      【讨论】:

        猜你喜欢
        • 2018-03-16
        • 2017-10-18
        • 2014-03-29
        • 2020-07-04
        • 2019-01-24
        • 2012-02-12
        • 1970-01-01
        相关资源
        最近更新 更多