Поиск по всем словам без гласных

#regex #powershell

#регулярное выражение #powershell

Вопрос:

У меня есть файл «dic.txt » и мне нужно выполнить поиск по всем словам, которые не содержат гласных.

 $dic = gc "dic.txt"
$v = @("aeiou")
foreach ($line in $dic){$line | ?{$_ -notcontains $v}}
  

Но это не работает.

Ответ №1:

попробуйте это:

 $dic = gc "dic.txt"

foreach ($line in $dic)
{
    $line | ? { $_ -notmatch 'a|e|i|o|u' }
}
  

Комментарии:

1. Я забыл букву «y» :- )

Ответ №2:

Если у вас есть по одному слову в каждой строке, что-то вроде этого:

 Select-String '(?i)^(?:(?![aeiou])[a-z-]) $' 'dic.txt'
  

Объяснение

  • (?i) делает его нечувствительным к регистру
  • ^ Привязка утверждает, что мы находимся в начале строки
  • (?:(?![aeiou])[a-z]) соответствует одной букве, которая не является a , e , i , o или u
  • повторяет это один или несколько раз
  • $ Привязка утверждает, что мы находимся в конце строки

Комментарии:

1. Возможно, это не относится к OP, но в случае «составленного слова», подобного spy-story , это не удается.

2. @CB Вы имеете в виду, что оно совпадает spy , потому что в нем нет гласных? Вы правы, и вы также правы в том, что, возможно, это именно то, чего хочет expirat001, а может быть, и нет. Дайте нам знать, истекает 0001. 🙂

3. нет, я имею в виду, что оно совпадает spy-story и в нем есть гласная o … попробуйте небольшой тест, и вы поймете, что я имею в виду..

4. @CB Это не соответствует story , с чего бы это? Смотрите демо

5. @CB Ты прав. Я уверен, что вы это знаете, но для протокола поведение связано не с регулярным выражением, а с grep , которое возвращает всю строку, в которой if находит совпадение, и spy является совпадением. Предполагая, что у нас есть по одному слову в строке, изменили регулярное выражение, чтобы слова были полностью привязаны. Хороший улов, спасибо. 🙂