如何自动为文本文件中的所有匹配字符串编号?

时间:2018-03-20 05:20:34

标签: python regex python-2.7

我有一个文本文件 C:\text\sample.txt 。如何搜索此文本文件,并为给定字符串的所有实例编号( 使用正则表达式 ),例如,以' h&#开头的单词39;以' y结尾?

sample.txt的样子:(对于此示例文件,我使用的正则表达式为\bh.+y\b,它将匹配happy和history。)

When a happy new history ...
Are you happy ...
How history ... very happy ...
... 

我希望实现的编号效果:

When a 1>happy new 2>history ...
Are you 3>happy ...
How 4>history ... very 5>happy ...
...

我是python编程的新手。我怎么能用python代码实现这个目的?

目前,我只想出以下代码:

import fileinput
import re
for line in fileinput.input('sample.txt',inplace=1):
line = re.sub(r'\bh.+y\b',r'\bh.+y\b', line.rstrip())

2 个答案:

答案 0 :(得分:0)

我没有你的文本文件,所以我只使用了文本“当一个快乐的新人你快乐多么幸福快乐”作为例子向你展示解决这个问题的方法。

word_to_find = "happy"
text_to_count = "When a happy new Are you happy How happy very happy"
text_table = text_to_count.split(" ")
counter = 1
text_output = ""

for i in text_table:
  if i == word_to_find:
    text_output += str(counter) + ">"+ str(i) + " "
    counter += 1
  else:
    text_output += str(i) + " "

print(text_output)

这可以作为输出:

When a 1>happy new Are you 2>happy How 3>happy very 4>happy 

您应该只用文本文件替换变量text_to_count

如果你想添加其他单词,你可以将它们添加到word_to_find并调整if条件

答案 1 :(得分:0)

据我了解您的问题,您需要在文件中搜索特定模式,然后将该匹配项与目前找到的匹配总数进行预先匹配。

以下是使用re.sub和自定义函数以及全局计数器的示例。您可以将其合并到您的代码中:

>>> count = 1
>>> s
'The happy and hungry hippo had a happy meal for lunch.'
>>> def f(m):
...   global count
...   value = '{}-{}'.format(count, m.group())
...   count = count + 1
...   return value
...
>>> re.sub(r'(h\w+y)', f, s)
'The 1-happy and 2-hungry hippo had a 3-happy meal for lunch.'

您必须在( )中包围正则表达式,以便捕获并返回匹配项,以便对其进行修改。