RegEx: Найти все строки, которые содержат не алфавитные символы? - PullRequest
1 голос
/ 05 апреля 2020

Я использую инструмент поиска RegEx в Sublime . Мне нужно выбрать все строки, которые содержат не алфавитные символы (за исключением пробелов).

Например,

Hedgehog's shoes
The Fox Machine
The Armadillo`s wish

. В приведенном выше примере будут выбраны все строки ежа и броненосца, поскольку они содержат не алфавитные символы. Линия лисы не будет выделена.

Вот мой код:

.*[^a-zA-Z\s]

Пояснение

.* - Selects string
[^] - Ignore everything in the square brackets
a-zA-Z - Ignores all alphabet characters 
\s - Ignores Space

Это должно работать в теории, но это не так «т . Он только выбирает все до оскорбительного персонажа, но ничего после него.

Обратите внимание, я ищу решение, которое работает в Sublime's Find and Replace. Если это невозможно в Sublime, то как я могу адаптировать код, чтобы я мог искать весь каталог файлов через терминал MacOS?

Я думаю, что сделать это в терминале будет

for f in *; do '.*[^a-zA-Z\s]' 

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

PS. Уже есть вопросы по этому поводу в Stackoverflow ( Как например ). Но они имеют дело только с выбором отдельных символов, а не всей строки.

Ответы [ 2 ]

2 голосов
/ 05 апреля 2020

Я предлагаю использовать

.*[^[:alpha:]\s].*
.*[^[:alpha:][:space:]].*

Подробности

  • .* - любой ноль или более символов, кроме символов разрыва строки, как можно больше
  • [^[:alpha:]\s] / [^[:alpha:][:space:]] - любой символ кроме алфавита c или символ пробела
  • .* - любой ноль или более символов, кроме символов разрыва строки, как можно больше

См. Демонстрационный пример SublimeText:

enter image description here

Обратите внимание, что вы можете использовать [^[:alpha:][:space:]] в терминале MacOS с grep:

grep '[^[:alpha:][:space:]]' file

См. онлайн-демонстрацию .

1 голос
/ 05 апреля 2020

Паттерн, который вы пробовали, сначала совпадает до конца строки и будет возвращаться назад, чтобы соответствовать одному из [^a-zA-Z\s]

После этого паттерна ничего нет, поэтому совпадение на этом остановится.

Поскольку у вас уже есть соответствие, вы можете сопоставить остаток строки, используя

.*[^a-zA-Z\s].*
...