Python 用正则表达式一次替换文章中所有特殊符号,如“-,$()#+&*”之类

本文介绍如何使用正则表达式进行字符串的查找、分割与替换,通过实例演示去除特殊字符的过程,适合初学者掌握正则表达式的应用技巧。

一个简单的正则表达式,可能会起大作用。比如说字符集就是这样。一篇文章如果有各种乱码,就可以用这种方法去除。如去除“-,$()#+&*”之类符号是很方便的。按照查找、分割、替换的套路再做一做这样的练习。今天晚了,后续还要操作文件来完善这一点。

 

import re

p=re.compile(r'[-,$()#+&*]')
str="156-04+31-0&#009$dddy*h(ih), 78dhi ,goodhi"

#查找特定单个字符
m=re.findall(p,str)
print(m)

#分割。如果一篇文章当中,要一次去掉某些特定的符号,这句很有效率
subs=re.split(p,str)
print(" ".join(subs))

#替换
print(re.sub(p," ooo ",str))

其结果是:

运行结果

<think> 我们要求一个正则表达式,用于匹配不包含特定特殊字符(*#%&+=|><';?"/\())以及不包含中文字符的字符串。 特殊字符列表:* # % & + = | > < ' ; ? " / \ ( ) 此外,还不能包含中文。 思路: 1. 对于特殊字符,我们可以使用否定字符类(negated character class)来排除它们。即 [^...] 表示匹配不在括号内的字符。 2. 但是注意,正则表达式中有些特殊字符需要转义,例如:* # % & + = | > < ' ; ? " / \ ( ) 中的 \ ( ) [ ] { } ^ $ . * + ? | 等。但在这个列表中,需要转义的有:* . ? + ( ) [ ] { } \ | ^ $ 等,但是因为我们是在字符类中,所以有些字符需要特殊处理。 在字符类中,需要转义的特殊字符有:^ - ] \ 所以,我们列出的特殊字符中,需要转义的有:* # % & + = | > < ' ; ? " / \ ( ) 实际上,在字符类内部,大多数字符不需要转义,除了以下几个: - 如果字符类中包含 ']',则必须放在最前面(或者使用转义) - 如果包含 '-',则必须放在最前面或最后面,或者转义 - 如果包含 '^',则不能放在开头(除非我们确实要表示否定,但这里我们已经在使用[^]了,所以需要注意,如果我们使用否定字符类,那么内部的^不需要转义,但如果是放在内部作为普通字符,则不需要特别处理,因为否定字符类的开头是[^,后面就是字符集合了) - 反斜杠\需要转义,即写成\\ 但是,我们这里是要排除这些字符,所以我们可以这样写: [^*#%&+=|><';?"/\\()] 注意:在字符类中,我们只需要转义反斜杠(写成\\)和右括号(有时需要,但为了安全,我们也可以转义,不过实际测试中,在字符类中右括号可以不用转义,只要它和左括号匹配即可,但为了避免歧义,我们将其转义)。但是,我们注意到特殊字符列表中有右括号,所以我们需要将右括号转义,否则它会和字符类的结束符混淆吗?实际上,在字符类中,右括号如果出现在非第一个位置(紧跟在[后面)且前面没有对应的左括号,那么它就被视为普通字符。但是为了安全,我们可以转义它,或者把它放在字符类的最前面。不过,我们也可以不转义,因为我们的列表中并没有左括号(左括号已经列出来了,但左括号在字符类中不需要转义)。但是,我们列出的特殊字符中包含了左括号和右括号,而左括号在字符类中不需要转义,右括号如果不在开头且没有和左括号形成分组,则也不需要转义。不过,为了清晰,我们可以将右括号转义。 但是,我们这里使用否定字符类,并且要排除的字符包括:*#%&+=|><';?"/\() 注意:在字符类中,由于反斜杠是转义字符,所以我们需要用两个反斜杠表示一个反斜杠。因此,我们要排除反斜杠,就需要写成\\。 因此,我们写: [^*#%&+=|><';?"/\\()] 3. 但是,我们还要排除中文字符。中文字符的Unicode范围通常是:\u4e00-\u9fff,但这并不完全(还包括扩展区等),但通常这样已经足够。所以,我们还需要排除这些中文字符。 4. 所以,我们可以写一个正则表达式,要求整个字符串都由非特殊字符且非中文字符组成。也就是说,我们可以用: ^[^\u4e00-\u9fff^*#%&+=|><';?"/\\()]+$ 解释: ^ 表示字符串开始 [^ ... ] 表示匹配不在括号内的字符 \u4e00-\u9fff 表示中文字符范围 后面跟着我们排除的特殊字符(注意,这里我们不需要再写中文字符,因为已经包含在排除范围了) + 表示一个或多个 $ 表示字符串结束 5. 但是,我们还需要考虑空字符串的情况。如果允许空字符串,那么我们可以用*(0个或多个)代替+(1个或多个)。根据需求,如果允许空字符串,则用*,否则用+。 6. 另外,我们还需要考虑其他字符,比如字母、数字、空格、下划线等等,因为它们都不在我们排除的范围内,所以都是允许的。 7. 但是,上面的正则表达式在字符类中,我们使用了\u4e00-\u9fff来表示中文字符。在大多数正则表达式引擎中,支持Unicode字符集的表示(如JavaScript、Python的re模块如果使用UNICODE标志,或者使用regex模块,或者Java等)。但是,有些环境可能不支持\u表示法,那么我们可以使用实际的字符范围,但这样不方便。另外,在Python中,我们可以使用re.UNICODE标志(或re.U)来启用Unicode匹配,这样[\u4e00-\u9fff]就能匹配中文字符。 8. 另外,我们可能还需要考虑更全面的中文字符。Unicode中,中文字符不仅包括\u4e00-\u9fff(CJK统一表意文字),还包括扩展区(如\u3400-\u4dbf等),以及一些补充区。如果需要更全面,可以加上这些范围。但通常,\u4e00-\u9fff已经覆盖了大部分常用汉字。 9. 如果我们想要更精确,可以使用\p{Han}(在支持\p{}语法的正则引擎中,如PCRE、Java、.NET等),但是Python的re模块不支持\p{}。所以,为了通用性,我们使用Unicode范围。 10. 因此,在Python中,我们可以这样写: pattern = r'^[^\u4e00-\u9fff*#%&+=|><\'";?/\\()]+$' 注意:在字符串中,我们使用了原始字符串(r前缀),这样反斜杠就不会被Python字符串转义。另外,在字符类中,我们不需要转义单引号(因为我们的字符串是用单引号的话,内部单引号需要转义,但这里我们用双引号或者原始字符串中单引号不需要转义)。但是,我们这里将单引号放在字符类中,在Python字符串中,如果外部是单引号,那么内部单引号需要转义,但为了避免混淆,我们可以使用双引号括起整个字符串,或者使用转义。但是,这里我们使用原始字符串,并且外部用单引号,那么内部单引号我们转义一下:\',这样更安全。 11. 但是,我们列出的特殊字符中有一个双引号,在字符类中,双引号不需要转义,所以我们可以直接写。但是,在Python字符串中,如果外部使用双引号,那么内部的双引号需要转义。所以,我们可以这样: 使用双引号括起来的模式字符串:pattern = "^[^\u4e00-\u9fff*#%&+=|><'\";?/\\\\()]+$" 或者使用原始字符串:pattern = r"^[^\u4e00-\u9fff*#%&+=|><'\";?/\\()]+$" 注意:在双引号的字符串中,反斜杠需要两个(因为Python字符串会转义一个),所以我们需要写两个反斜杠来表示一个反斜杠。而在原始字符串中,我们可以写一个反斜杠,但为了在字符类中表示一个反斜杠,我们需要写两个,因为正则表达式本身需要转义反斜杠。但是,在否定字符类中,我们写一个反斜杠需要转义,所以应该写成\\\\(在非原始字符串中)或\\(在原始字符串中)。但是,我们在否定字符类中,要排除反斜杠,所以应该写一个反斜杠,但是因为反斜杠是转义字符,所以我们需要用两个反斜杠来表示一个。在原始字符串中,我们用"\\\\"或者r"\\"表示一个反斜杠。但是,在字符类中,我们写`\\\\`实际上表示一个反斜杠(因为正则引擎会将其解释为一个反斜杠)。所以,在原始字符串中,我们写`\\`,这样在正则表达式中就是`\`。 12. 因此,在原始字符串中,我们这样写: r'^[^\u4e00-\u9fff*#%&+=|><\'";?/\\\\()]+$' 但是,这样写太容易混淆了。实际上,在字符类中,要排除反斜杠,我们可以写成`\\\\`(在原始字符串中写两个反斜杠),因为正则表达式在解析字符类时,会看到两个反斜杠,然后解释为一个反斜杠字符。但是,我们这里已经使用了原始字符串,所以写成两个反斜杠(即`\\\\`)实际上在正则表达式中会被视为两个反斜杠?不对,在原始字符串中,`r'\\\\'`表示四个反斜杠?不对,原始字符串中,`r'\\'`表示两个字符(一个反斜杠和一个字符?不对,`r'\\'`就是两个反斜杠字符,但在正则表达式引擎中,两个反斜杠会被解释为一个反斜杠字符?不对,正则表达式引擎中,两个反斜杠表示一个反斜杠字符。所以,在字符类中,我们需要用一个反斜杠,所以应该写两个反斜杠(即正则表达式中的两个反斜杠表示一个实际的反斜杠字符)。但是,在字符类中,我们要排除一个反斜杠,所以写`\\\\`(在原始字符串中)?这样写的话,在正则表达式中就是`\\`,这表示一个反斜杠字符。所以,这样是可以的。 13. 为了避免混淆,我们可以将需要排除的特殊字符列出来,然后将其中的反斜杠和右括号进行转义(在字符类中,反斜杠必须转义,右括号不一定需要,但为了安全,我们可以不转义右括号,而是确保它出现在非第一个位置且前面没有未匹配的左括号)。但是,我们也可以将右括号放在字符类的最前面(除了开头的^之后),这样就不需要转义。 14. 因此,我们可以这样写: [^\u4e00-\u9fff*#%&+=|><'" ;?/\\\\()] 但是,右括号我们放在哪里?如果放在中间,可能会被误解为结束符。所以,我们可以将右括号放在最前面(在^之后): [^)\u4e00-\u9fff*#%&+=|><'" ;?/\\\\(] 15. 但是,这样可读性差。实际上,在字符类中,除了几个特殊字符(] \ - ^)需要特殊处理外,其他都可以直接出现。所以,我们可以将右括号放在中间,只要不是紧跟在[后面(因为[^已经表示否定了,后面第一个字符如果不是]或-,那么就是普通字符)。所以,我们可以写成: [^*#%&+=|><'";?/\\\\()\u4e00-\u9fff] 16. 然后,我们还要注意,在字符类中,范围表示(如a-z)是有效的,所以如果我们把-放在中间,可能会被解释为范围。为了避免,我们可以将-放在字符类的最后面(或者最前面,但最前面是^,所以不能紧挨着[^,否则会被认为是范围,所以可以放在最后)或者转义。所以,我们这里将中文字符范围\u4e00-\u9fff放在最后,并确保-出现在两个字符之间(这里\u4e00和\u9fff之间的-是作为范围连接符,这是允许的,但是如果我们单独写一个-在字符类中,就需要特殊处理)。我们这里不需要单独排除-,所以我们只需要确保字符类中的-要么是作为范围连接符,要么是放在最后(或最前)即可。 17. 所以,我们这样写: [^*#%&+=|><'";?/\\\\()\u4e00-\u9fff] 但是,这个字符类中,\u4e00-\u9fff是一个范围,所以没有问题。而其他字符都是直接写出的,包括右括号(没有在开头)和左括号(没有转义),这样也可以。 18. 但是,我们还要排除空格吗?注意,我们列出的特殊字符中没有空格,所以空格是允许的。所以,我们的字符类中不包含空格,所以不会排除空格。 19. 因此,完整的正则表达式为: ^[^*#%&+=|><'";?/\\\\()\u4e00-\u9fff]+$ 或者,为了可读性,我们可以将Unicode范围放在最后: ^[^*#%&+=|><'";?/\\\\()\u4e00-\u9fff]+$ 20. 但是,我们还需要考虑中文字符的扩展区?如果需要,可以添加扩展区,例如: \u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff 等(具体需要根据需求) 21. 另外,我们可能还需要考虑全角符号?通常,全角符号不在这个范围内,而且我们的特殊字符是半角的。所以,全角符号(比如全角的括号)不被排除?但是,如果需求是只允许半角字符(除了特殊字符排除外,只允许半角的字母数字等),那么全角符号(包括全角的中文标点)是不允许的,因为它们属于中文字符的扩展区?实际上,全角符号在Unicode中位于不同的区块,比如全角句号在\u3002,所以如果我们需要排除所有中日韩字符和标点,可能需要更复杂的范围。但根据题目,只排除特殊字符(明确列出的半角字符)和中文(这里通常指汉字)。所以,我们只排除汉字。 22. 因此,我们使用\u4e00-\u9fff作为中文字符的范围。 23. 最后,我们给出正则表达式: ^[^*#%&+=|><'";?/\\\\()\u4e00-\u9fff]+$ 这个正则表达式的含义是:整个字符串由除了特殊字符(*#%&+=|><'";?/\\())和汉字以外的字符组成。 24. 测试:我们可以测试一些字符串: "abc123" -> 匹配 "abc*" -> 不匹配(因为包含*) "abc中文" -> 不匹配(因为包含中文) "abc()" -> 不匹配(因为包含()"abc 123" -> 匹配(因为空格不在排除之列) "abc_123" -> 匹配(下划线不在排除之列) "abc$123" -> 匹配(因为$不在排除之列,但是注意,我们列出的特殊字符中没有$,所以允许) 25. 但是,用户要求排除的特殊字符列表中没有$,所以$是允许的。这符合要求。 26. 另外,注意我们排除了反斜杠,所以在字符串中不能出现反斜杠。 27. 所以,这个正则表达式满足要求。 28. 但是,我们也可以考虑使用更简洁的方式:先用一个排除特殊字符的字符类,再排除中文。但这样就需要两个条件。不过,我们可以用两个否定字符类合并,实际上就是在一个否定字符类中排除所有我们不想要的字符。 29. 因此,最终的答案是: 正则表达式: ^[^*#%&+=|><'";?/\\\\()\u4e00-\u9fff]+$ 30. 在Python中,我们可以这样使用(注意:在非原始字符串中,我们需要对反斜杠进行双重转义): import re pattern = re.compile(r'^[^*#%&+=|><\'";?/\\\\()\u4e00-\u9fff]+$') # 测试 print(pattern.match("abc123")) # 匹配 print(pattern.match("abc*")) # 不匹配 31. 但是,在Python中,如果字符串是Unicode字符串,那么\u4e00-\u9fff会被正确处理。在Python3中,字符串默认是Unicode。 32. 另外,如果希望支持多行匹配(但这里我们匹配整个字符串,所以不需要多行),我们不需要re.MULTILINE。 33. 所以,我们给出正则表达式字符串: r'^[^*#%&+=|><\'";?/\\\\()\u4e00-\u9fff]+$' 注意:在字符类中,我们有一个单引号,为了在原始字符串中表示单引号,我们用\',但实际上在原始字符串中,单引号不需要转义(因为我们的字符串是用单引号括起来的,所以内部单引号需要转义,但这里我们使用双引号括起整个字符串?)。为了避免问题,我们使用双引号括起整个正则表达式字符串,这样内部单引号就不需要转义。或者,我们使用原始字符串并用双引号括起来,这样内部单引号就不需要转义。 34. 因此,我们可以这样写: pattern = r"^[^*#%&+=|><'\" ;?/\\\\()\u4e00-\u9fff]+$" 但是,这样内部的双引号需要转义(因为外部用了双引号)。所以,我们写成: pattern = r'^[^*#%&+=|><\'";?/\\\\()\u4e00-\u9fff]+$' 35. 或者,我们也可以将双引号放在字符类中而不转义(因为外部是单引号),但是为了安全,我们转义单引号。 36. 最终,我们选择: ^[^*#%&+=|><'";?/\\\\()\u4e00-\u9fff]+$ 37. 但是,我们注意到特殊字符列表中有空格吗?没有。所以我们的字符类中没有空格,所以空格是允许的。但是,我们在字符类中写了一个空格(在双引号后面)?不对,在字符类中,我们没有写空格,所以空格不会被排除。但是,我们在字符类中写了一个分号,分号后面是问号,然后紧接着是斜杠,然后两个反斜杠,然后括号,最后是中文范围。所以,我们的字符类中并没有空格。所以,空格是允许的。 38. 修正:在特殊字符列表中,没有空格,所以空格是允许的。所以,我们的正则表达式允许空格。 39. 但是,我们可能还需要考虑其他控制字符?比如换行符、制表符等。如果需求不允许这些,那么我们需要额外排除。但题目没有提到,所以我们认为只排除特殊字符和中文。 40. 因此,这个正则表达式满足要求。 41. 还有一点:我们排除的是特殊字符和中文,那么其他语言(如日文、韩文)的字符呢?题目只要求排除中文,所以日文、韩文等不包括在内。但是,如果需求是只允许ASCII字符(除了特殊字符排除的,其他ASCII字符都允许),那么我们就需要排除所有非ASCII字符。但是这里题目只要求排除特殊字符(明确列出的)和中文,所以其他非ASCII字符(如日文)是允许的。如果需求是只允许ASCII字符,那么我们需要排除所有非ASCII字符。但题目没有说明,所以我们按照要求,只排除中文和特殊字符。 42. 因此,我们的正则表达式允许非中文的其他非ASCII字符,比如日文假名、希腊字母等。 43. 如果需求是只允许ASCII字符(即排除所有非ASCII字符),那么我们可以这样写: ^[^\u0080-\U0010ffff]*$ # 排除所有非ASCII字符,但这样也会排除中文,所以我们可以不用单独排除中文了。但是,这样会排除掉所有非ASCII字符,包括我们可能想允许的拉丁字母扩展(如带音标的字母)等。所以,根据需求,如果只允许ASCII,我们可以用: ^[ -~]*$ 这个字符类表示从空格(0x20)到波浪线(0x7E)的ASCII字符。但是,这样我们就要同时排除中文和特殊字符。但是,在只允许ASCII的情况下,中文已经被排除了(因为中文不在ASCII中),所以我们只需要排除特殊字符。所以,我们可以写: ^[^ *#%&+=|><'";?/\\\\()]*$ # 注意,这里我们添加了空格(因为空格在ASCII中,我们允许,所以不能排除,但是我们要排除特殊字符,所以我们把特殊字符列在否定字符类中,而空格不在排除之列,所以允许。另外,注意这里我们在字符类开头加了一个空格,所以空格也被包括在允许的字符中?不对,否定字符类[^...]表示除了...以外的字符。所以,我们列出的特殊字符(包括空格?不对,我们这里没有排除空格,因为我们在否定字符类中列出的特殊字符没有空格?)实际上,我们在否定字符类中列出的特殊字符中,有空格吗?没有。所以,空格是允许的。但是,我们写[^ *#%...]表示排除空格和*#%...。所以,我们错误地排除了空格。因此,我们需要将空格从否定字符类中移除。所以,正确的写法是: ^[^ *#%&+=|><'";?/\\\\()]*$ # 这个表达式排除了空格和特殊字符,所以空格不被允许。但是,我们想要允许空格,所以不应该排除空格。因此,我们不应该在否定字符类中包含空格。 44. 所以,如果我们只允许ASCII字符,并且排除特殊字符(不包含空格),那么我们可以写: ^[ -~]*$ # 这个允许所有ASCII字符(从空格到波浪线),包括空格。但是,这个表达式没有排除特殊字符。所以,我们需要在允许的ASCII字符中排除那些特殊字符。因此,我们可以写: ^[!-~]*$ # 但是,这样排除了空格(因为空格在!之前)。所以,我们还需要包括空格。我们可以用: ^[ !#-\\--~]*$ # 这样写很复杂,因为我们需要排除特殊字符,所以不如用否定字符类排除特殊字符,同时要求所有字符都是ASCII。所以,我们可以用两个条件:整个字符串由ASCII字符组成,并且不包含特殊字符。但是,正则表达式一个表达式完成,我们可以用: ^(?!.*[^*#%&+=|><'";?/\\\\()])[ -~]+$ # 这样太复杂。 45. 由于题目没有要求只允许ASCII字符,所以我们不需要考虑这个。我们只排除特殊字符和中文。 46. 所以,我们回到之前的表达式。 47. 因此,最终的正则表达式为: ^[^*#%&+=|><'";?/\\\\()\u4e00-\u9fff]+$ 48. 但是,注意特殊字符列表中的空格:用户给出的特殊字符列表中没有空格,但是我们注意到在用户输入的特殊字符列表中,有一个空格?不对,用户输入的是:“特殊字符(*#%&+=|><';?"/\()”,这里没有空格。所以,空格是允许的。 49. 另外,注意特殊字符列表中有一个双引号,我们在字符类中已经包含了。 50. 所以,我们输出正则表达式字符串。 但是,为了确保正确,我们可以在线测试一下。 由于不同语言对Unicode的支持可能不同,我们以JavaScript为例(因为JavaScript也支持\u表示法): var regex = /^[^*#%&+=|><'";?/\\()\u4e00-\u9fff]+$/; console.log(regex.test("abc")); // true console.log(regex.test("a*b")); // false console.log(regex.test("a中b")); // false console.log(regex.test("a b")); // true (中间有空格) console.log(regex.test("a(b")); // false console.log(regex.test("a\\b")); // false 因为包含反斜杠 51. 在JavaScript中,我们不需要双反斜杠,因为正则表达式字面量中,一个反斜杠就需要写一个。但是,在字符串中表示正则表达式时,我们需要双反斜杠(因为字符串转义)。而我们这里给出的正则表达式字符串,在JavaScript中如果通过字符串构建,需要写成: var regexStr = "^[^*#%&+=|><'\";?/\\\\()\u4e00-\u9fff]+$"; var regex = new RegExp(regexStr); 52. 所以,我们给出的是正则表达式字符串,用户在使用时需要根据语言进行适当的转义。 53. 因此,我们回答:输入不包含特殊字符(*#%&+=|><';?"/\())和中文的正则表达式为: ^[^*#%&+=|><'";?/\\\\()\u4e00-\u9fff]+$ 54. 注意:在Python中,我们使用原始字符串(r前缀)来避免转义问题。 55. 另外,如果希望匹配空字符串,可以使用*(0次或多次),否则使用+(1次或多次)。这里我们使用+,表示至少一个字符。如果允许空字符串,则改为*。 根据需求,如果输入可以为空,则用*,否则用+。这里没有明确,我们给出+的版本,如果允许空字符串,用户可自行替换。 56. 所以,我们给出最终答案。 </think>根据您的需求,需要匹配**不包含特殊字符(*#%&+=|><';?"/\())且不包含中文字符**的输入。以下是满足要求的正则表达式及详细解释: ### 正则表达式 ```regex ^[^\u4e00-\u9fff*#%&+=|><'";?/\\()]+$ ``` ### 说明 1. **核心结构**:`[^...]` - 表示"否定字符类",匹配**不在**括号内的任何字符 - 例如 `[^abc]` 匹配非a、b、c的任意字符 2. **排除内容**: - 中文字符:`\u4e00-\u9fff` (覆盖Unicode中的基本汉字区,约2万个常用汉字) - 特殊字符:`*#%&+=|><'";?/\\()` (注意:反斜杠 `\` 需转义为 `\\`,其他字符直接列出) 3. **边界限定**: - `^` 匹配字符串开头,`$` 匹配字符串结尾 - `+` 表示至少出现1次(若允许空字符串可改为 `*`) ### 使用示例(Python) ```python import re pattern = re.compile(r'^[^\u4e00-\u9fff*#%&+=|><\'";?/\\()]+$') # 测试用例 test_cases = ["hello123", "abc_def", "123$", " ", "中文", "a*b", "x/y"] for s in test_cases: print(f"'{s}': {bool(pattern.match(s))}") ``` 输出: ``` 'hello123': True # 合法:字母数字 'abc_def': True # 合法:下划线 '123$': True # 合法:$不在排除列表 ' ': True # 合法:空格 '中文': False # 非法:包含中文 'a*b': False # 非法:包含* 'x/y': False # 非法:包含/ ``` ### 关键细节 1. **空格允许**:未在排除列表中,因此` `(空格)可正常匹配 2. **其他语言支持**: 该表达式**仅排除中文**,其他非中文文字(如日文、韩文)允许出现。若需排除所有非ASCII字符,需额外添加范围`\u0080-\U0010ffff` 3. **转义注意**: 在不同编程语言中,需正确处理反斜杠(如Python用`r''`原始字符串,Java需双写`\\\\`) ### 常见适配场景 | 场景 | 正则修改建议 | |---------------|----------------------------------| | 允许空字符串 | 将`+`改为`*` | | 排除所有非ASCII | 追加`\u0080-\U0010ffff`到字符类 | | 额外排除空格 | 在字符类中添加空格 | 此表达式已覆盖您的需求,如需扩展排除字符(如`$`或`_`),直接在字符类中添加即可。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值