正则表达式:查找所有包含非字母字符的行?

RegEx: Find all lines that contain non alphabet characters?

我正在使用 Sublime 中的 RegEx 搜索工具。 我需要 select 所有包含非字母字符(不包括空格)的行。

例如

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

在上面,整个 hedgehog 和 armadillo 行将被 selected,因为它们包含非字母字符。狐狸线不会 selected.

这是我的代码:

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

说明

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

理论上应该可行,但是 it doesn't。它只 select 包含违规字符之前的所有内容,但之后没有任何内容。

请注意,我正在寻找适用于 Sublime 的查找和替换的解决方案。如果这在 Sublime 中是不可能的,那么我该如何调整代码以便我可以通过 MacOS 终端搜索整个文件目录?

我认为在终端中进行

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

但这也不管用。

PS。 Whosebug 上已经有关于此的问题 (Such as this one)。但他们只处理 selecting 单个字符而不是整行。

我建议使用

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

详情

  • .* - 除换行字符外的任何零个或多个字符,尽可能多
  • [^[:alpha:]\s] / [^[:alpha:][:space:]] - 除了字母或空白字符之外的任何字符
  • .* - 除换行字符外的任何零个或多个字符,尽可能多

查看 SublimeText 演示:

请注意,您可以在 MacOS 终端中使用 [^[:alpha:][:space:]]grep:

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

an online demo

您首先尝试的模式匹配直到行尾,然后回溯以匹配 [^a-zA-Z\s]

之一

该模式后没有任何内容,因此匹配将停在那里。

因为你已经匹配了,你可以使用

来匹配该行的其余部分
.*[^a-zA-Z\s].*