我正在尝试从文本文件中提取单词,每个行只包含一个单词。但是如果没有" _"(下划线)或" - "我只想匹配这个词。 (短划线)在单词中:
文件可能如下所示:
我只想提取第1行和第1行。 2并忽略第3行& 4
(即当正则表达式匹配每一行时的结果应该是:
某些字
的SomeOtherword
没有"<"以及每行的空间)
我一直在尝试" [\ w - ] +"它与_和& -
我正在使用PowerShell正则表达式引擎。
我正在处理一个接近100000行的文件。我不想根据需要循环每一行,处理时间非常快。我正在使用的代码:
$ rx =' [\ w - ] +'
Get-Content $ filename | Select-String -Pattern $ rx -AllMatches | select -ExpandProperty匹配| select -ExpandProperty Value | out-file $ outputfile
答案 0 :(得分:1)
要在powershell中执行正则表达式匹配,您可以使用-match
运算符或select-string
。 -notmatch
还有一个-NotMatch
运算符和select-string
标记。两者都过滤了没有匹配。
所以一个选项是
gc 'file.txt' | where { $_ -notmatch '-|_' } | foreach { $_.Trim('<', ' ') }
而另一个是
gc 'file.txt' | select-string -NotMatch '-|_' | foreach { $_.Line.Trim('<', ' ') }
答案 1 :(得分:1)
如果您对性能敏感,这种方法的速度要快得多(2.6秒对80毫秒):
(Select-String '^[a-zA-Z]+$' file.txt -AllMatches).Matches.Value
这确实需要PowerShell v3的新功能。你不会说你正在使用哪个版本。