用 6 位随机数字替换数字的最后 6 位

用 6 位随机数字替换数字的最后 6 位

我想用 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++ 文档,或对其进行过滤,或直接传输到控制台窗口
  • 所有对象和方法的完整文档

来源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

相关内容