使用PowerShell计算文件中的句子数

使用PowerShell计算文件中的句子数,powershell,count,sentence,Powershell,Count,Sentence,我的PowerShell程序在计算我正在使用的文件中的句子数时遇到问题。我正在使用以下代码: foreach ($Sentence in (Get-Content file)) { $i = $Sentence.Split("?") $n = $Sentence.Split(".") $Sentences += $i.Length $Sentences += $n.Length } 我应该得到的句子总数是61句,但我得到了71句,有人能帮我解决这个问题吗?我的句

我的PowerShell程序在计算我正在使用的文件中的句子数时遇到问题。我正在使用以下代码:

foreach ($Sentence in (Get-Content file))
{
    $i = $Sentence.Split("?")
    $n = $Sentence.Split(".")
    $Sentences += $i.Length
    $Sentences += $n.Length
}
我应该得到的句子总数是61句,但我得到了71句,有人能帮我解决这个问题吗?我的句子也设置为零

谢谢

我编辑了你的代码

这个。您使用的需要转义,否则Powershell会将其识别为Regex dotall表达式,表示任何字符


因此,您应该在[?\]或类似位置拆分字符串。

计算句子时,您要查找的是每个句子的结尾。不过,拆分会返回围绕这些结尾字符的一组句子片段,而结尾本身由元素之间的间隙表示。因此,句子的数量将等于间距的数量,即拆分结果中片段的数量减少一个

当然,正如上面的评论所指出的,当您可以直接计算端点时,实际的拆分是不必要的

Get Content test.txt中的foreach$语句{ 在每次出现“.”和“?”时拆分,并计算间距。 $Split=$station.Split'.?' $SplitSequences+=$Split.Count-1 计算“.”和“?”的每次出现次数。 $Ends=[char[]]$句子-匹配“[.?]” $counted句子+=$Ends.Count } test.txt文件的内容:

另外,要澄清以下备注:PowerShell运算符默认情况下将字符串解释为正则表达式,而.NET方法仅适用于文本字符串值

例如:

“Unclosed[bracket?”-拆分“[?]”将[?]视为正则表达式字符类,并匹配?字符,返回两个字符串“Unclosed[bracket”和 'Unclosed[bracket?'。Split'[?]”将调用重载并匹配每个[,?]和]字符,返回三个字符串'Unclosed','bracket',和
我们需要查看您的内容文件以及您的代码。如果同一行有多个句子,您可以使用“拆分”来重复计算句子。为什么不只计算?和.characters?的数量?@Vasili-您已经通过编辑更改了OP问题的含义。如果他/她正在进行拆分?然后继续n这是问题的一部分。我意识到这一点后,不久前将其改了回去。通过编辑问题,您已经模糊了OP遇到的问题。只需回答并展示您所做的更改,以使其正确;不要更改问题。这对我有一点帮助,我不会得到超过我应该得到的五句话。我只是不知道我不知道从何处获取额外的数字。如果您尝试以下方法:test-split.,您将看到它将其拆分为4行,因为。表示正则表达式中的任何字符。很抱歉,我不知道如何或在何处添加有关问题@DiMono的文本文件。
foreach ($Sentence in (Get-Content file))
{
    $i = $Sentence.Split("[?\.]")
    $Sentences = $i.Length
}
Is this a sentence? This is a 
sentence. Is this a sentence? 
This is a sentence. Is this a
very long sentence that spans
multiple lines?