选择带有单词和数字的字符串

时间:2019-08-28 12:25:40

标签: powershell

尝试选择一个返回单词和数字但不删除其余输出内容的字符串。

现在我有以下内容:

print ((df['field_1'] + df['field_2']).to_string(header=False, index=False)))

我能够在输出中提取所有包含TRANS字词的交易,但例如也去除了99和97。

目标:字符串能够捕获TRANS12,TRANS13并返回到名为August的交易类别。事务99和97将被拉到另一个类别中,称为另一个数组。

2 个答案:

答案 0 :(得分:2)

基于answer from Lee_Dailey

中的变量定义

您可以使用Select-String cmdlet来检索相关值来简化匹配:

$InStuff | Select-String $TargetPattern -AllMatches | Foreach-Object {$_.Matches.Value}

注意:语法$_.Matches.Value(称为“ 属性枚举”)要求PSv3或更高版本,
对于PSv2,请使用Select-Object -ExpandProperty cmdlet参数。

答案 1 :(得分:1)

我对严格的正则表达式解决方案[ blush ]不满意,因此使用了非常简单的正则表达式模式。如果您可以让正则表达式母版为您提供复杂的模式,则速度可能会更快。

代码做什么...

  • 无法读取文件
    您的示例中有几个错误,因此我使用了编辑版本。
  • 设置目标图案
    模式是单词trans和一个或多个数字。
  • 使用-match处理集合的方式来获取包含目标模式的任何行
  • , [空格然后逗号]上分割
  • 删除所有前导/尾随空格
  • 过滤包含目标模式的所有项目
  • 将其发送到$TargetItems集合
  • 显示该集合中的项目

这是代码...

# fake reading in a text file
#    in real life, use Get-Content
$InStuff = @'
Associations : 1, 2, 3, 4
Transactions: 20, 21, 22 

Associations : 5, 6, 7, 8
Transactions, 99, TRANS12, TRANS13, 97
'@ -split [System.Environment]::NewLine

$TargetPattern = 'trans\d{1,}'

$TargetItems = ($InStuff -match $TargetPattern -split ', ').
    Trim().
    Where({
        $_ -match $TargetPattern
        })

$TargetItems

输出...

TRANS12
TRANS13