正则表达式、PowerShell,如何让它显示在 PowerShell 中?

发布于 2025-01-11 06:34:17 字数 1210 浏览 0 评论 0 原文

将以下 PowerShell 脚本与 Regex 结合使用。

问题: 我没有收到文件名返回的任何数据。

POWERSHELL 中的当前结果:

在此处输入图像描述

POWERSHELL 中的预期结果:

在此处输入图像描述

这个正则表达式演示正在做我认为应该在正则表达式中做的事情。 (源自这个 问题。)

POWERSHELL SCRIPT:

$InStuff = @('111111_SMITH, JIM_END TLD 6-01-20 THR LEWISHS.pdf','222222_JONES, MIKE_G URS TO 7.25 2-28-19 SA COOPSHS.pdf')


switch -Regex ($instuff) {
    '^(^.{0,6})*|(?!.*_).*(?=\.)'{     
        [pscustomobject]@{
            EmployeeID         = $matches.1
            FileName             = $matches.2            
        }
    }
}

问题: 我需要更改什么才能使文件名显示在 PowerShell 结果中?

In using the following PowerShell Script with Regex.

THE PROBLEM: I don't get any data returned for the Filename.

CURRENT RESULTS IN POWERSHELL:

enter image description here

EXPECTED RESULTS IN POWERSHELL:

enter image description here

This Regex Demo is doing what I would think it should be doing in Regex. (Originating from this question.)

POWERSHELL SCRIPT:

$InStuff = @('111111_SMITH, JIM_END TLD 6-01-20 THR LEWISHS.pdf','222222_JONES, MIKE_G URS TO 7.25 2-28-19 SA COOPSHS.pdf')


switch -Regex ($instuff) {
    '^(^.{0,6})*|(?!.*_).*(?=\.)'{     
        [pscustomobject]@{
            EmployeeID         = $matches.1
            FileName             = $matches.2            
        }
    }
}

QUESTION:
What do I need to change to get the filename to show up in the PowerShell results?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

淡笑忘祈一世凡恋 2025-01-18 06:34:17

看起来像一个简单的 。 Split() 可以实现你想要的。该方法会将字符串分割3个标记,然后将其分配给EmployeeID$a$null 对于用户(我们在这里使用$null来简单地忽略这个标记,因为您已经声明它不感兴趣)和 $b 代表文件名。在 PowerShell 中,这称为 多重赋值

要根据评论中的要求从 $b 令牌中删除扩展名,正则表达式不需要,您可以使用 Path.GetFileNameWithoutExtension来自 System.IO 的方法

$InStuff = @(
    '111111_SMITH, JIM_END TLD 6-01-20 THR LEWISHS.pdf'
    '222222_JONES, MIKE_G URS TO 7.25 2-28-19 SA COOPSHS.pdf'
)

foreach($i in $InStuff) {
    $a, $null, $b = $i.Split('_')
    [pscustomobject]@{
        EmployeeID = $a
        FileName   = [System.IO.Path]::GetFileNameWithoutExtension($b)
    }
}

结果是:

EmployeeID FileName
---------- --------
111111     END TLD 6-01-20 THR LEWISHS
222222     G URS TO 7.25 2-28-19 SA COOPSHS

Seems like a simple .Split() can achieve what you're looking for. The method will split the string into 3 tokens which then get assigned to $a for the EmployeeID, $null for the User (we use $null here to simply ignore this token since you have already stated it was not of interest) and $b for the FileName. In PowerShell, this is known as multiple assignment.

To remove the extension from the $b token, as requested in your comment, regex is also not needed, you can use Path.GetFileNameWithoutExtension Method from System.IO.

$InStuff = @(
    '111111_SMITH, JIM_END TLD 6-01-20 THR LEWISHS.pdf'
    '222222_JONES, MIKE_G URS TO 7.25 2-28-19 SA COOPSHS.pdf'
)

foreach($i in $InStuff) {
    $a, $null, $b = $i.Split('_')
    [pscustomobject]@{
        EmployeeID = $a
        FileName   = [System.IO.Path]::GetFileNameWithoutExtension($b)
    }
}

Which results in:

EmployeeID FileName
---------- --------
111111     END TLD 6-01-20 THR LEWISHS
222222     G URS TO 7.25 2-28-19 SA COOPSHS
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文