當計數的句子,你正在尋找的是每個句子結束。儘管如此,分割會在這些結束字符周圍返回一組句子片段,而這些結尾本身是由元素之間的間隙表示的。因此,句子的數量將等於間隔的數量,這是拆分結果中片段的數量的一倍。
當然,作爲Keith Hill上述評論人士指出,實際的分裂是沒有必要的時候可以直接算結束。
foreach($Sentence in (Get-Content test.txt)) {
# Split at every occurrence of '.' and '?', and count the gaps.
$Split = $Sentence.Split('.?')
$SplitSentences += $Split.Count - 1
# Count every occurrence of '.' and '?'.
$Ends = [char[]]$Sentence -match '[.?]'
$CountedSentences += $Ends.Count
}
內容test.txt
文件:
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?
此外,對言論澄清Vasili's answer:PowerShell的-split
運營商解釋字符串作爲一個正則表達式默認情況下,雖然.NET Split
方法o只能使用文字字符串值。
例如:
'Unclosed [bracket?' -split '[?]'
將把[?]
爲正則表達式字符類和匹配?
字符,返回兩個字符串'Unclosed [bracket'
和''
'Unclosed [bracket?'.Split('[?]')
將調用Split(char[])
過載和相互匹配[
, ?
,並且]
字符,返回三個字符串'Unclosed '
,'bracket'
,並''
我們需要看到您的內容文件,以及你的代碼。 – DiMono
如果在同一行上有多個句子,則可以使用拆分結束重複計算句子。爲什麼不計算'?'和'.'字符的數量? –
@Vasili - 你已經改變了OP的問題的含義,通過修改它來修復它。如果他/她正在對'?'進行分割,然後對'.'進行分割,那麼這就是問題的一部分。 –