Regex 正则表达式仅匹配不带u或-

Regex 正则表达式仅匹配不带u或-,regex,powershell,Regex,Powershell,我试图从一个文本文件中提取单词,该文件每行只包含一个单词。但我只想在单词中没有“uz”(下划线)或“-”(破折号)时匹配单词: 文件可能如下所示:

我试图从一个文本文件中提取单词,该文件每行只包含一个单词。但我只想在单词中没有“uz”(下划线)或“-”(破折号)时匹配单词:
文件可能如下所示:

  • 我只想提取第1行和第2行,忽略第3行和第4行
    (即,当正则表达式匹配时,每行的结果应为:

    someword
    SomeOtherword

    无“要在powershell中进行正则表达式匹配,可以使用
    -match
    运算符或
    选择字符串
    。还有
    -notmatch
    运算符和
    -notmatch
    标志用于
    选择字符串
    。这两种方法都会筛选不匹配项

    因此,一个选择是

    gc 'file.txt' | where { $_ -notmatch '-|_' } | foreach { $_.Trim('<', ' ') }
    

    gc'file.txt'|其中{$\notmatch'-{$\u'}foreach{$\u0.Trim(“如果您对性能敏感,这种方法的速度要快得多(2.6秒vs.80毫秒):


    这确实需要PowerShell v3新增的功能。您不需要说明使用的是哪个版本。

    我需要通过正则表达式完成此操作,因为我无法循环处理接近100000行的文件内容,需要快速处理。$rx=“^[a-zA-Z]+$”获取内容$ofile |选择字符串-模式$rx-所有匹配项|选择-ExpandProperty匹配项|选择-ExpandProperty值
    “^[a-zA-Z]+$”不匹配..你说的“我不想循环每一行”是什么意思?你还要如何检查每一行是否有破折号或下划线?我处理了一条100k行(~6MB)使用我的答案在4秒钟内归档。这还不够快吗?你确定这些时间吗?我尝试将结果写入一个文件中(只取下我的答案并在管道末端插入一个
    添加内容
    ),结果更像是11秒对7秒。可测量,但不是30倍的差异。是的。
    (测量命令{(选择字符串^[a-zA-Z]+$'file.txt-AllMatches.Matches.Value}).TotalSeconds
    输出0.0857457和
    (测量命令{gc'file.txt'|其中{$\notmatch'-|}foreach{$\u0.Trim('是的,我有类似的设置(SSD上的Windows 8.1)。我在我的文件上运行了几个不同的正则表达式,我认为这一个真正的亮点是当您只需要文件中的几行时。这就是性能提高的主要原因是不让字符串进入管道。我的第一个测试匹配了文件中的大多数行,因此差异较小。使用限制更严格的筛选器,只提取一个fe10万行中有十几行显示了3.7秒与200秒的差异。谢谢。这解决了我的问题。很抱歉我在处理方面太迂腐了。我的脚本做了很多其他处理器密集型的事情,这加起来就是运行脚本所需的总时间。所以我正试图将每个子进程的延迟降到最低。
    
    gc 'file.txt' | select-string -NotMatch '-|_' | foreach { $_.Line.Trim('<', ' ') }
    
    (Select-String '^[a-zA-Z]+$' file.txt -AllMatches).Matches.Value