我想用 6 个随机数替换数字的最后 6 位。如何在 Notepad++ 或 TextCrawler Pro 中执行此操作?我有一堆文本文件,我想让软件扫描所有 9 位数字组合并随机替换最后 6 位。
答案1
这两个程序似乎都不支持“替换”字段中的变量(除了原始匹配文本中的捕获组)。因此它们无法生成随机替换;最多只能以某种固定方式重新排序现有数字(例如每次都是 123456789 → 123496857)。
然而,我觉得有义务建议Perl改为一行:
perl -p -e 's/\b(\d{3})\d{6}\b/$1.sprintf("%06d", int(rand(1000000)))/ge'
该正则表达式\b(\d{3})\d{6}\b
的工作方式与 Notepad++(使用 PCRE)相同;它匹配 9 位数字并捕获前 3 位以供日后使用。
在 Perl 中s///
,该/e
标志表示替换将被解释为实际的 Perl 代码,因此它可以调用函数并生成随机数。您也可以在支持替换回调的其他语言中实现相同的功能(例如 Python 或 Ruby)。
用法:
perl -p -e '...' < file.txt > file_new.txt (create a new file)
perl -i -p -e '...' file.txt (update in-place)
答案2
我希望用 6 个随机数替换数字的最后 6 位数字。
您不能直接在 Notepad++ 中执行此操作。
但是,你可以安装python 脚本插件并编写一些代码来实现这一点。
Notepad++ 的 Python 脚本
- 完全以编程方式访问 Notepad++ 的功能和菜单
- 完全以编程方式访问 Scintilla 的所有功能
- 调用其他插件菜单项
- 将菜单项、快捷方式和工具栏图标分配给脚本
- 直接从 Python 脚本处理 Notepad++ 和 Scintilla 事件
- Python 控制台内置
- 完全支持正则表达式搜索和替换 - 脚本 Python 正则表达式替换
- 启动外部程序并将输出直接传输到 Notepad++ 文档,或对其进行过滤,或直接传输到控制台窗口
- 所有对象和方法的完整文档
答案3
您可以在 PythonScript 插件中运行 Python 脚本。
如果尚未安装,请按照此操作指导
创建脚本(插件>> PythonScript >> 新脚本)
复制此代码并保存文件(例如random.py
):
import re
def calculate(match):
# generate a random integer in range 0-999999, cast to string and fill with 0 to the left
return str(random.randint(0,999999)).zfill(6)
editor.rereplace(r'(?<=\b\d{3})\d{6}\b', calculate)
- 打开要更改的文件
- 运行脚本(插件>> PythonScript >> 脚本>> 随机)
- 完毕
正则表达式解释:
(?<= # positive lookbehind, zero-length assertion that makes sure we have before
\b # a word boundary
\d{3} # 3 digits
) # end lookbehind
\d{6} # 6 digits
\b # word boundary
鉴于:
abc 123456789 xyz
def 987654321 tuv
ghi 111111111 opq
klm 222222222 rst
123456789123465
111111111111111
给定示例的结果:
abc 123535410 xyz
def 987865493 tuv
ghi 111414834 opq
klm 222382724 rst
123456789123465
111111111111111