ChatGPT解决这个技术问题 Extra ChatGPT

正则表达式,除空格或冒号外的所有非字母数字字符

我怎么能在任何地方做这个?

基本上,我正在尝试匹配各种杂项字符,例如&符号、分号、美元符号等。

/[^a-zA-Z0-9\s\:]*/

T
Tudor Constantin
[^a-zA-Z\d\s:]

\d - 数字类

\s - 空格

a-zA-Z - 匹配所有字母

- 全部否定 - 所以你得到 - 非数字字符,非空格和非冒号


这也是我在看的:)) - 我必须宣传你的完美答案
我发现的唯一一件事是这会删除像 é 或 ã 这样的特殊字符。我更喜欢 [^\w\d\s:]。
否决,因为这不会捕获非拉丁字符,也不会捕获“特殊”拉丁字符。
\d\s 是 Perl 扩展,它们通常不受 grepsedtrlex 等旧工具的支持。
P
Peter Mortensen

这应该这样做:

[^a-zA-Z\d\s:]

其余的要么检查空格但不检查空格,要么在错误的位置进行否定以实际否定。
\w 也捕获下划线 - 这是一个非字母数字字符
啊哈!我要修改——我不知道。我希望它对不同引擎的工作方式不同,但不妨给 OP 一个安全的答案。
否决,因为这不会捕获非拉丁字符,也不会捕获“特殊”拉丁字符。
N
Nick F

如果您想将带重音的拉丁字符(例如 à Ñ)视为普通字母(即避免匹配它们),您还需要在您的正则表达式中包含适当的 Unicode 范围(\u00C0-\u00FF),这样看起来像这样:

/[^a-zA-Z\d\s:\u00C0-\u00FF]/g

^ 否定后面的

a-zA-Z 匹配大小写字母

\d 匹配数字

\s 匹配空白(如果您只想匹配空格,请将其替换为空格)

: 匹配冒号

\u00C0-\u00FF 匹配重音拉丁字符的 Unicode 范围。

注意。 Unicode 范围匹配可能不适用于所有正则表达式引擎,但上述内容肯定适用于 Javascript(如 Codepen 上的 this pen 所示)。

NB2。如果您不介意匹配下划线,可以将 a-zA-Z\d 替换为 \w,它匹配字母、数字和下划线。


此范围包含一些非字母数字字符(U+00D7 和 U+00F7),并排除了许多来自非西方语言(如波兰语、捷克语、越南语等)的有效重音字符。
赞成对 RegEx 的每个部分的描述。
P
Peter Mortensen

尝试这个:

[^a-zA-Z0-9 :]

JavaScript 示例:

"!@#$%* ABC def:123".replace(/[^a-zA-Z0-9 :]/g, ".")

查看在线示例:

http://jsfiddle.net/vhMy8/


否决,因为这不会捕获非拉丁字符,也不会捕获“特殊”拉丁字符。
对答案投反对票很容易,但向董事会提供建设性信息却更加困难,例如,一个人如何捕捉非拉丁字符,也不是“特殊”拉丁字符?根据我的计数,您出于同样的原因对 3 个答案投了反对票,并且在我看来,这是一个相当小的调整。例如,我在这里为这些答案中讨论的内容找到一个正则表达式。我不关心不会在我的应用程序中使用的字符集。收益递减规律。
亚伦对美国公民来说可能是一个“小调整”,但与这个星球的其他地方高度相关。
[^a-zA-Z0-9 :] 可以替换为 [^\w:]
\w 也包含下划线,因此请注意
V
Vasyl Gutnyk

没有字母数字、空格或“_”。

var reg = /[^\w\s)]|[_]/g;

P
Peter Mortensen

如果您的意思是“非字母数字字符”,请尝试使用:

var reg =/[^a-zA-Z0-9]/g      //[^abc]

C
Chris Halcrow

在 JavaScript 中:

/[^\w_]/g

^ 否定,即选择以下集合中的任何

\w 任何单词字符(即任何字母数字字符,加上下划线)

_ 否定下划线,因为它被视为“单词”字符

使用示例 - const nonAlphaNumericChars = /[^\w_]/g;


[^\w_][^\w] 相同(因为 _ 是一个字字符),它等于 \W
P
Peter Mortensen

此正则表达式适用于 C#PCREGo 等等。

根据 RegexBuddy 的说法,它不适用于 Chrome 上的 JavaScript。但是这里已经有一个例子。

这其中的主要部分是:

\p{L}

它代表 \p{L}\p{Letter} 来自任何语言的任何类型的字母。`

完整的正则表达式本身: [^\w\d\s:\p{L}]

示例: https://regex101.com/r/K59PrA/2


这是此处以正确方式正确处理 Unicode 重音字母的唯一答案。遗憾的是,并不是所有的正则表达式引擎都支持这个功能(即使 Python 3.8 也缺少它,尽管它的正则表达式引擎表面上是基于 PCRE 的)。
我将从答案中删除 Python,我以为我已经测试过了,但显然没有。感谢您指出了这一点。
P
Peter Mortensen

尝试添加这个:

^[^a-zA-Z\d\s:]*$

这对我有用...... :)


这似乎重复了 2011 年接受的答案。^$ 锚将其限制为匹配整行,而 * 量词意味着它也匹配空行。
i
its_ me

[^\w\s-]

不包含以下字符的字符集:

字母数字

空白

冒号