Powershell 中的高级模式匹配

2024-03-13

希望你能帮我做点什么。感谢@mklement0,我得到了一个很棒的脚本,它匹配按字母顺序排列的单词的最基本的初始模式。然而,缺少的是全文搜索和选择。 当前脚本的示例,其中包含 Words.txt 文件中几个单词的小样本:

App
Apple
Apply
Sword
Swords
Word
Words

Becomes:

App
Sword
Word

这很棒,因为它确实缩小到每行一个基本模式!然而,逐行运行的结果仍然有一个可以进一步缩小范围的模式,即“Word”(大写不重要),所以理想情况下输出应该是:

App
Word

“剑”被删除,因为它属于以“词”为前缀的更基本模式。

您对如何实现这一目标有什么建议吗?请记住,这将是大约 25 万个单词的字典列表,因此我不会提前知道我要查找什么

代码(来自相关帖子 https://stackoverflow.com/a/61305240/45375, 手柄prefix仅匹配):

$outFile = [IO.File]::CreateText("C:\Temp\Results.txt")   # Output File Location
$prefix = ''                   # initialize the prefix pattern

foreach ($line in [IO.File]::ReadLines('C:\Temp\Words.txt')) # Input File name.
 {

  if ($line -like $prefix) 
    { 
    continue                   # same prefix, skip
    }

  $line                        # Visual output of new unique prefix
  $prefix = "$line*"           # Saves new prefix pattern
  $outFile.writeline($line)    # Output file write to configured location
}

您可以尝试分两步进行的方法:

  • 步骤 1:在按字母顺序排序的单词列表中查找唯一前缀列表。这是通过顺序读取行来完成的,因此只需要您将唯一的前缀作为一个整体保存在内存中。

  • 步骤 2:按长度顺序对结果前缀进行排序并迭代它们,在每次迭代中检查手头的单词是否已经由 a 表示它的子串在结果列表中。

    • 结果列表一开始是空的,只要手头的单词在结果列表中没有子字符串,它就会被追加到列表中。

    • 结果列表被实现为正则表达式交替(|),以便在单个操作中启用对所有已找到的唯一单词的匹配。

你必须看看性能是否足够好;为了获得最佳性能,尽可能直接使用 .NET 类型。

# Read the input file and build the list of unique prefixes, assuming
# alphabetical sorting.
$inFilePath = 'C:\Temp\Words.txt' # Be sure to use a full path.
$uniquePrefixWords = 
  foreach ($word in [IO.File]::ReadLines($inFilePath)) {
    if ($word -like $prefix) { continue }
    $word
    $prefix = "$word*"
  }

# Sort the prefixes by length in ascending order (shorter ones first).
# Note: This is a more time- and space-efficient alternative to:
#    $uniquePrefixWords = $uniquePrefixWords | Sort-Object -Property Length
[Array]::Sort($uniquePrefixWords.ForEach('Length'), $uniquePrefixWords)

# Build the result lists of unique shortest words with the help of a regex.
# Skip later - and therefore longer - words, if they are already represented
# in the result list of word by a substring.
$regexUniqueWords = ''; $first = $true
foreach ($word in $uniquePrefixWords) {
  if ($first) { # first word
    $regexUniqueWords = $word
    $first = $false
  } elseif ($word -notmatch $regexUniqueWords) {
    # New unique word found: add it to the regex as an alternation (|)
    $regexUniqueWords += '|' + $word
  }
}

# The regex now contains all unique words, separated by "|".
# Split it into an array of individual words, sort the array again...
$resultWords = $regexUniqueWords.Split('|')
[Array]::Sort($resultWords)

# ... and write it to the output file.
$outFilePath = 'C:\Temp\Results.txt' # Be sure to use a full path.
[IO.File]::WriteAllLines($outFilePath, $resultWords)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Powershell 中的高级模式匹配 的相关文章

  • 在powershell中,如何获得用于调用函数的确切原始命令?

    有什么东西在 MyInvocation是这样的吗 或者有什么办法可以提取出来 我想要函数调用中用于参数的原始文本 使用时有一些注意事项 myinvocation line or myinvocation position 如果您将命令的调用
  • 如何使用正则表达式验证 1-99 范围?

    我需要验证一些用户输入 以确保输入的数字在 1 99 范围内 含 这些必须是整数 Integer 值 允许前面加 0 但可选 有效值 1 01 10 99 09 无效值 0 007 100 10 5 010 到目前为止 我已经制定了以下正则
  • PowerShell Get-VHD“不是现有的虚拟硬盘文件”

    在 Hyper V 中创建新 VM 时 为了使事情井井有条 我在创建关联的 VHDX 文件时使用特定的命名约定 命名约定是 VM FQDN 后跟 SCSI 控制器连接点 后跟 VM 内部的驱动器名称或使用名称 我将 SCSI 和 Name
  • Powershell强类型环境变量

    我想设置一个强类型环境变量 当我使用 env 时它似乎 丢失 了它的类型 在原始函数中它工作正常 function Create ThisCrap Microsoft ApplicationInsights TelemetryClient
  • while 循环中 regex.exec() 赋值的更好解决方案

    这里有更好的解决方案吗 我尽量避免里面的作业while但仍然能够循环匹配并使用捕获的组 var match var CSS URL PATTERN url s s s s gm while match CSS URL PATTERN exe
  • Javascript拆分正则表达式问题

    你好 我正在尝试我认为在 Javascript 中相当简单的正则表达式 但给我带来了很多麻烦 我希望能够通过 javascript 通过 和 分割日期 var date 02 25 2010 var myregexp2 new RegExp
  • PHP:如何使用 nl2br() 和 HTML Purifier 保持换行?

    Issue 使用时HTML 净化器 http htmlpurifier org 为了处理用户输入的内容 换行符不会被转换为 br tags 考虑以下用户输入的内容 Lorem ipsum dolor sit amet This is ano
  • 在Python中比较字符串的最快方法

    我正在用 Python 编写一个脚本 该脚本将允许用户输入一个字符串 该字符串将是指示脚本执行特定操作的命令 为了便于讨论 我会说我的命令列表是 lock read write request log 现在 我希望用户能够输入 log 一词
  • 如何从java中的字符串中删除非数字字符? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我有一根很长的绳子 将数字拆分到数组中的正则表达式是什么 你是删除还是分裂 这将删除所有非数字字符 myStr myStr replaceA
  • Powershell,从txt文件读取并格式化数据(删除行,删除之间的空格)

    我对 powershell 真的很陌生 我想使用powershell读取txt文件并将其更改为其他格式 从 txt 文件中读取 设置数据格式 删除行 删除之间的空格 记录计数 T 000000002 9 个字符 然后将输出写入新文件 我两天
  • 什么是@”运算符?

    我在互联网上搜索了这意味着什么 包括 and 单独 正是在这个code https gist github com jakeballard 11240204 Win32ShowWindowAsync Add Type memberDefin
  • R strsplit:根据字符分割,除非后面有特定字符

    假设我有一个字符串向量 例如 split these c File Location C Documents File Location Pete s Computer File Location 我想根据 分割该向量中的每个元素 除非后面
  • Winform 启动后隐藏或最小化 powershell 提示符

    我编写了一个简单的 powershell 脚本来启动 winform 在 powershell 脚本中编写的 Winform 代码 例如 showContent ps1 文件 并显示一些内容 我需要在Winform启动后隐藏powershe
  • 如何替换字符串中除第一次出现之外的所有模式

    快速问题 我的模式是一个 svg 字符串 它看起来像l 5 0 l 0 10 l 5 0 l 0 10要与参考进行一些单元测试比较 我需要放弃除第一个之外的所有内容l我知道我可以放弃它们并在前面放置一个 l 或者我可以使用子字符串 但我想知
  • 回退到正则表达式中字符串的开头

    是否可以让正则表达式退回到字符串的开头并再次开始匹配 这就是我问的原因 给定下面的字符串 我想捕获子字符串black red blue and green按照该顺序 无论主题字符串中出现的顺序如何 并且仅当所有子字符串都存在于主题字符串中时
  • 在 PowerShell 中,如何组合具有一对一关系的两个命令的结果?

    此特定示例是 Get User 和 Get Mailbox Exchange 2010 Get User 返回一些我需要的列 Get Mailbox 返回一些其他列 我很难弄清楚如何将两者的结果合并到一个表中 并包含两者的结果 Get Us
  • 如何使用 PowerShell 捕获全局击键?

    Powershell 可以监听并捕获按键吗 是否可以编写一个 PowerShell 脚本 例如自动热键 https www autohotkey com 位于托盘中并等待您按下预定义的键盘键才开始执行 并且每次按下所述键时可能不会返回而是触
  • 正则表达式 - Python - 删除前导空格

    我使用正则表达式在文本文件中搜索 产品 一词 然后 我使用该搜索的起点和终点来查看该列并提取整数 有些实例 A 列 有我不想要的前导空格 我只想将数字 如 B 列中的数字 打印到文件中 没有前导空格 正则表达式中的正则表达式 有条件的 pr
  • Pandas - 过滤器和正则表达式搜索 DataFrame 的索引

    我有一个 DataFrame 其中列是 MultiIndex 索引是名称列表 即index Andrew Bob Calvin 我想创建一个函数来返回数据帧中使用名称 Bob 或以字母 A 开头或以小写字母开头的所有行 如何才能做到这一点
  • 使用 PowerShell 批量复制和重命名文件

    我正在尝试使用 PowerShell 批量复制和重命名文件 原始文件名为AAA001A jpg AAB002A jpg AAB003A jpg等 我想用新名称复制文件 方法是从文件名中删除前四个字符以及句点之前的字符 以便复制的文件被命名为

随机推荐

  • UINavigationBar自定义过渡动画

    我使用以下协议在视图控制器之间创建了自定义转换 UIViewControllerAnimatedTransitioning and UIViewControllerTransitioningDelegate 是否可以使用默认的UINavig
  • 是什么让这两个数组相加不同?

    我用它来获取用户输入并清理代码 我试图解决这个问题 然后代码停止工作 这有效 BindVar array BindVar Email BindVar pass 然而 这并没有 BindVar array Email pass 这是当我更改该
  • Flask-SQLAlchemy 小写索引 - 跳过功能,SQLAlchemy 反射不支持

    首先 如果这个问题已经得到解答 我深表歉意 但我在任何地方都找不到答案 我需要在 Flask SQLAlchemy 对象上定义一个小写索引 我遇到的问题是我需要将模型用户名和电子邮件字段存储为小写 以便我可以检查它们User query f
  • DI Singleton 实例与 Transient 实例

    几年前 IoC 性能指南指出 IoC 容器应仅用于解析长期实例 基本上是单例 而应使用单例工厂 由容器保存 创建瞬态类型对象 我现在正在阅读有关 ASP NET Core 的内容 我看到的几个示例对其注入的对象使用瞬态生命周期 现在瞬态是提
  • 如何在 Meteor 提供的服务器中设置环境变量?

    我想在远程服务器上测试流星谷歌分析包 设置 json public ga account UA dfgddhdh 5 在本地服务器中 我只是传入 settings选项 我在看http meteorpedia com read Environ
  • 如何在各种单独的文件中分离与特定模式匹配的文件名和内容

    我试图将与特定模式匹配的文件名分离到一个单独的文件中 并将其内容分离到与特定模式匹配的不同文件中 我的文件名包含特殊字符 如 我尝试使用 grep 命令 Grep Ril 和 Grep H 打印文件名 但它不起作用 bin bash cd
  • Flutter,后台获取包不工作,androidx 不兼容

    我想在应用程序未运行时进行一些操作 所以我决定使用后台提取包 我一步步按照android设置 这是我的 pubspec yaml 的一部分 version 1 0 0 1 environment sdk gt 2 1 0 lt 3 0 0
  • 在 C++ 中编写可移植动态可加载库的最简单方法是什么?

    我正在开发一个具有多个相似代码路径的项目 我想将其从主项目中分离到插件中 该项目必须保持跨平台兼容 并且我研究过的所有动态库加载 API 都是特定于平台的 创建一个无需额外修改代码即可在多个操作系统上编译和运行的动态库加载系统的最简单方法是
  • 如何使用卡图生成概述国家的世界地图

    我最近一直在看卡图仪 据我所知 我们使用 kartograph py 生成 svg 然后使用 kartograph js 中的 svg 在 Web 界面中渲染地图 我想生成这样的东西http kartograph org showcase
  • 自动加载类的父类是否调用 __autoload() ?

    In main php 添加自动加载并创建一个新对象 function autoload class require once class php t new Triangle side1 side2 side3 In Triangle p
  • python:改变“全局变量”以动态地将事物放入范围内

    这是多么可怕的想法 班级monad实施with将事物放入和超出范围的接口 因此我可以编写一个通用函数库 例如 m chain 引用函数unit and bind谁可以在运行时放入实现 所有这些代码的作用或它是否是一个好主意并不重要 我尝试过
  • 如何从应用程序(布局)XML 变量中获取清单版本号?

    我希望有一种方法可以在代码的主要部分引用项目的清单版本号 到目前为止 我一直在做的是将字符串 XML 文件中的版本号链接到清单 string Version 我想要做的是反过来 将字符串 XML 变量链接到清单中的版本 原因 我只想更改一个
  • iOS Webrtc - 捕获本地视频流时崩溃

    我正在尝试使用 Google 存储库中的 webrtc 库 我按照这些步骤创建了一个单独的项目 其中包含类似于 APPRTC 的说明和代码 并且我能够让它工作 我能够在两台设备之间进行会议 但是当我尝试与旧项目集成时 Webrtc 崩溃了
  • Android 中的 SYSCALL_INLINE

    我需要在 Android NDK 内部使用系统调用来防止包装函数的挂钩 在 Linux 中 有像 SYSCALL INLINE 这样的宏 它允许在没有包装函数的情况下使用系统调用 因此 宏将系统调用汇编代码直接嵌入到项目中 我在 Andro
  • 如何在CodeIgniter中实现Redis?

    我得到的教程是 http yaminnoor com redis codeigniter http yaminnoor com redis codeigniter https codeigniter com user guide libra
  • 使用 S3 作为静态网页和 EC2 作为 REST API 一起使用吗? (AWS)

    我发现这个链接讨论了将静态数据和 Web api 分离到静态 s3 Web 服务器以及用于 api 和 ec2 Web 服务器的 bean stalk 应用程序来创建网站 Charles 的回答是准确的 CORS 是解决两个域之间移动问题的
  • 检查记录是否存在,如果存在则“更新”,如果不存在“插入”

    我想查表PREMIUM SERVICE USER如果存在任何记录strClientID update timeValid如果没有记录则 30strClientID插入到premium service user table 我究竟做错了什么
  • 为什么 msiexec TARGETDIR 似乎不起作用

    I tried msiexec i yarn 1 10 1 msi TARGETDIR C programs qb 软件已安装 但未安装到 TARGETDIR 中 我错过了什么 您可以尝试以下命令行 msiexec exe i yarn 1
  • Angular 5下载带有post请求的excel文件

    我遇到一个问题 我已经使用 Angular 1 下载了一个 Excel 文件 但如果我在 Angular 5 中实现相同的代码 则会显示文件已损坏的错误 我的回复是在数组缓冲区我无法读取该文件 下面是我的代码 Service Downloa
  • Powershell 中的高级模式匹配

    希望你能帮我做点什么 感谢 mklement0 我得到了一个很棒的脚本 它匹配按字母顺序排列的单词的最基本的初始模式 然而 缺少的是全文搜索和选择 当前脚本的示例 其中包含 Words txt 文件中几个单词的小样本 App Apple A