如何解决Powershell中带有正则表达式的字计数器
var words = "word worddd woord wooord 45555";
var wordCount = words.match(/([a-zA-Z]\w+)/g).length;
if(wordCount == 4 || wordCount == 6 ){
WScript.Echo(wordCount);//Result 4
}
如何制作一个像 jscript 一样工作的 ps1 脚本
解决方法
一般来说:Measure-Object
cmdlet 有一个 -Word
开关:
$words = "word worddd woord wooord"
$wordCount = ($words | Measure-Object -Word).Words
if ($wordCount -in 4,6){
$wordCount # -> 4
}
注意:如果您确实需要 PS v2 支持,请使用 4,6 -contains $wordCount
代替 $wordCount -in 4,6
要将被视为单词的内容限制为以(ASCII 范围)字母开头的内容,就像您的问题一样,需要做更多工作:
$words = "word worddd woord wooord 45555"
# Count only words that start with an (ASCII-range) letter.
$wordCount = ((-split $words) -match '^[a-z]\w+$').Count
if ($wordCount -in 4,6){
$wordCount # -> 4,because '45555' wasn't counted.
}
-
-split
的一元形式,即 string splitting operator,通过空格将字符串拆分为一个标记数组。 -
-match
,即 regular-expression matching operator,将每个结果标记再次与 RHS 正则表达式匹配:-
-match
默认查找子串,因此需要锚点^
和$
-
-match
默认情况下不区分大小写(就像 PowerShell 通常一样),因此[a-z]
涵盖小写和大写字母。
-
-
(...).Count
返回匹配标记的结果数组的长度(元素计数)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。