如何从字符串中删除除字母、数字、空格、感叹号和问号之外的所有内容?

Posted

技术标签:

【中文标题】如何从字符串中删除除字母、数字、空格、感叹号和问号之外的所有内容?【英文标题】:How to remove everything but letters, numbers, space, exclamation and question mark from string? 【发布时间】:2012-09-02 20:00:08 【问题描述】:

如何删除所有内容,但:

字符串中的字母、数字、空格、感叹号、问号?

该方法支持国际语言 (UTF-8),这一点很重要。

【问题讨论】:

您希望表达式允许或删除以下字符,例如:ãéè(等等...)? 【参考方案1】:

你可以使用正则表达式

myString.replace(/[^\w\s!?]/g,'');

这将替换除单词字符、空格、感叹号或问题之外的所有内容。

Character Class:\w代表“字字符”,通常是[A-Za-z0-9_]。请注意包含下划线和数字。

\s 代表“空白字符”。它包括[ \t\r\n]

如果你不想要下划线,你可以只使用[A-Za-z0-9]

myString.replace(/[^A-Za-z0-9\s!?]/g,'');

对于 unicode 字符,您可以在表达式中添加 \u0000-\u0080 之类的内容。这将排除该 unicode 范围内的所有字符。您必须指定不想删除的字符的范围。您可以在Unicode Map 上查看所有代码。只需添加您想要保留的字符或一系列字符。

例如:

myString.replace(/[^A-Za-z0-9\s!?\u0000-\u0080\u0082]/g,'');

这将允许所有前面提到的字符,范围从\u0000-\u0080\u0082。它将删除\u0081

【讨论】:

只是一个想法,但这不也留下了下划线字符吗? 原来国际字符并不像我想象的那么复杂,很好的答案@sachleen :) @KelvinMackay——什么是“国际人物”? “国家”和“国际”的概念取决于你在哪里。不过,有各种语言和用途的字符。 在示例中,您有一个错字...应该是 myString.replace (缺少替换中的 a)。【参考方案2】:

到目前为止发布的两个答案都省略了问号。我会评论他们,但还没有足够的代表。

David 是正确的,sachleen 的正则表达式会留下下划线。 rcdmk 的正则表达式,修改如下,可以解决问题,但如果您关心国际字符,事情可能会变得更加复杂。

var result = text.replace(/[^a-zA-Z0-9\s!?]+/g, '');

这将留下新的行和制表符以及空格。如果您还想去掉新的行和标签,请将其更改为:

var result = text.replace(/[^a-zA-Z0-9 !?]+/g, '');

【讨论】:

!? 在这个正则表达式中做了什么?【参考方案3】:
text = "A(B)C;:a.b*!c??!1<>2@#3"
result = text.replace(/[^a-zA-Z0-9]/g, '')

应该返回ABCabc123

首先,我们将文本定义为A B C a b c 1 2 3,但使用随机字符 将result 设置为:

text.replace(...)其中参数为:

/.../g,/.../:^表示反转;不要删除以下字母:

a-z(小写字母)、A-Z(大写字母)和0-9(数字)

g 表示全局,删除所有匹配而不只是第一个匹配

第二个参数是替换字符,我们将它设置为一个空字符串,这样它就只保留指定的字符串。如果指定了,它将返回:"A B C a b c 1 2 3"

【讨论】:

【参考方案4】:

您可以尝试使用正则表达式,例如:var cleaned = someString.replace(/[^a-zA-Z0-9! ]+/g, "");

【讨论】:

我认为您从正则表达式中删除了 g 标志。

以上是关于如何从字符串中删除除字母、数字、空格、感叹号和问号之外的所有内容?的主要内容,如果未能解决你的问题,请参考以下文章

如何从python中的unicode字符串中删除除数字和“,”之外的所有字符?

正则表达式匹配指定数据和字母

从 PHP 中的字符串中删除除字母数字字符之外的所有内容

Python中如何从键盘中输入字符串,统计字母,数字,符号和空格的个数?

Python移除指定文件夹中所有文件名称中的特殊字符(数字特殊字符空格等)只保留字母字符

Python移除指定文件夹中所有文件名称中的特殊字符(数字特殊字符空格等)只保留字母字符