Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何解决;选择字符串-模式";通过管道返回对象而不使用foreach循环?_Regex_Powershell_Pipeline - Fatal编程技术网

Regex 如何解决;选择字符串-模式";通过管道返回对象而不使用foreach循环?

Regex 如何解决;选择字符串-模式";通过管道返回对象而不使用foreach循环?,regex,powershell,pipeline,Regex,Powershell,Pipeline,假设我有一个包含以下内容的文件: 1,first_string,somevalue 2,second_string,someothervalue n,n_nd_string,somemorevalue 我需要获取该文件的内容,获取最后一个字符串,并获取“,”符号前的数字(在本例中为n)。(我将只增加它并将n+1字符串附加到此文件,但现在这并不重要)。我希望所有这些都用管道级联完成 到目前为止,我已经找到了这个解决方案: [int]$number=获取内容。\1.mpcpl |选择对象-最后一个

假设我有一个包含以下内容的文件:

1,first_string,somevalue
2,second_string,someothervalue
n,n_nd_string,somemorevalue
我需要获取该文件的内容,获取最后一个字符串,并获取“,”符号前的数字(在本例中为n)。(我将只增加它并将n+1字符串附加到此文件,但现在这并不重要)。我希望所有这些都用管道级联完成

到目前为止,我已经找到了这个解决方案:

[int]$number=获取内容。\1.mpcpl |选择对象-最后一个1 |选择字符串-模式^(\d)| ForEach对象{$|.matches.value}
它实际上可以工作,但我想知道是否有任何方法可以在不使用foreach循环的情况下寻址Select String-Pattern“^(\d)”返回对象?因为我知道在我的例子中,return集合只包含一个1元素(我正在选择一个文件的最后一个字符串,我只得到一个匹配项)

您可以使用

$num = [int]((Get-Content .\1.mpcpl | Select-Object -Last 1) -replace '^(\d).*', '$1')
注释

  • (获取内容。\1.mpcpl |选择对象-最后一行)
    -读取文件并获取最后一行
  • (…-replace'^(\d.*','$1')
    -从返回的行中获取第一个数字(注意:如果该行没有以数字开头,它将失败,因为输出将是整行)
  • [int]
    将字符串值强制转换为int
另一种方法是获取匹配项,然后从默认的
$matches
变量中检索它:

[IO.File]::ReadAllText($filepath) -match '(?m)^(\d).*\z' | Out-Null
[int]$matches[1]

(?m)^(\d)。*\z
模式将最后一行开头的数字输入到组1中,因此
$matches[1]

在我看来它就像一个csv

import-csv 1.mpcpl -header field1,field2,field3 | select -last 1 | select -expand field1
输出:

n

您可能需要一个
-match
操作符来仅获取第一个匹配项。或者
-replace
-replace'^(\d.*')、'$1'
hm,但是如何在管道中准确应用-match或-replace运算符?例如,在我得到一个文件的最后一个字符串后。这是一个很好的字符串,但这个特定的文件可能看起来像一个csv文件,但它不一定应该是csv文件,所以我决定为不同的数据结构提供更通用的解决方案,具有一个共同的特性--每行开头的行号。我喜欢括号解决方案。谢谢