首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Notepad++中的匹配模式之前添加具有特定模式的新行

在Notepad++中的匹配模式之前添加具有特定模式的新行
EN

Stack Overflow用户
提问于 2018-09-14 01:55:58
回答 3查看 42关注 0票数 1

我有一个csv文件,我想要修改它。我喜欢在包含"M06“字符的每一行之前添加一行"M19”。

之前:

代码语言:javascript
复制
T40400010
M06
(T40400010, 5.0MM SOLID CARBIDE REAMER - 6FL)

改革后:

代码语言:javascript
复制
T40400010
M19
M06
(T40400010, 5.0MM SOLID CARBIDE REAMER - 6FL)

我计划在python中使用正则表达式来解决这个问题,但我也对其他解决方案持开放态度。谢谢。

EN

回答 3

Stack Overflow用户

发布于 2018-09-14 02:03:34

您可以执行以下操作:

代码语言:javascript
复制
import re 

with open(fn) as f:
    for line in f:
        if re.search(r'^M06$', line):
            print('M19')
        print(line) 

打印:

代码语言:javascript
复制
T40400010
M19
M06
(T40400010, 5.0MM SOLID CARBIDE REAMER - 6FL)

如果您想在M06之后使用M19,只需将print(line)移到if re.search(r'^M06$', line):上方,而不是下方。

如果你想要有‘编辑’文件的效果,并且文件的大小是合理的(即很容易放入内存),你可以这样做:

代码语言:javascript
复制
import re 

with open(fn) as f:
    data=re.sub(r'^(M06)$', r'M19\n\1', f.read(), flags=re.M)       

with open(fn, 'w') as f:
    f.write(data)   

如果内存中的文件大于所需大小,则可以执行以下操作:

代码语言:javascript
复制
import re, tempfile, shutil

with open(fn, 'r') as f_in, tempfile.NamedTemporaryFile(mode='w', delete=False) as f_out:
    tmp_name=f_out.name
    for line in f_in:   
        if re.search(r'^M06$', line):
            print('M19\n',end='', file=f_out)   
        print(line,end='', file=f_out)  

shutil.move(tmp_name, fn)   
票数 3
EN

Stack Overflow用户

发布于 2018-09-14 02:04:20

你可以使用Notepad++内置的search+replace对话框(我用Strg+H)。

搜索正则表达式^M06$并将其替换为M19\r\nM06 (如果在unix上,则使用\n\r\n为windows)。

确保选择Regular expression选项。

如果你真的想在这两者之间加上一个换行符,那就在\r\n上加倍

票数 1
EN

Stack Overflow用户

发布于 2018-09-14 02:05:45

您可以在Notepad++中使用以下表达式进行搜索来执行此操作:

代码语言:javascript
复制
^(M06)$

并将其替换为:

代码语言:javascript
复制
M19\n\1

\n字符表示新行,\1表示对正则表达式括号中的"M06“值的引用。括号中的任何内容(在本例中为"M06")都将被捕获,并以\1的形式返回。

我之所以使用对捕获组的引用,而不是仅仅将其替换为"M19\nM06",是因为您可能希望更改表达式以查找更多数据。例如,如果M06行上有其他数据,则可能需要查找如下表达式:

代码语言:javascript
复制
^(.*M06.*)$

编辑:帕特里克先我一步回答。我把这个留下来,只是为了添加捕获组。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52319319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档