正则表达式只匹配没有_或 - 的单词

时间:2014-11-29 19:31:13

标签: regex powershell

我正在尝试从文本文件中提取单词,每个行只包含一个单词。但是如果没有" _"(下划线)或" - "我只想匹配这个词。 (短划线)在单词中:
文件可能如下所示:

  1. < someword
  2. < SomeOtherword
  3. < wordwith划线-anotherd
  4. < wordwith_under_anotheru
  5. 我只想提取第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

2 个答案:

答案 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的新功能。你不会说你正在使用哪个版本。