正则表达式为非字母和非数字
请提供一个在C#.NET中编写正则表达式的解决方案:我需要一个RegEx for Non-Alphabets(a到z; A到Z)和非数字(0到9)。 意思是说除了字母和其他数字(0到9)之外,获得正则表达式的反向方式。
请提出相同的解决方案。
你可以在这里使用否定的字符类 :
[^a-zA-Z0-9]
以上正则表达式将匹配单个字符,该字符不能是拉丁小写字母或大写字母或数字。
字符类开头的^
( [
和]
之间的部分) 否定完整的类,以便它匹配不在类中的任何内容,而不是正常的字符类行为。
为了使它有用,你可能想要其中一个:
-
零个或多个此类字符
[^a-zA-Z0-9]*
这里的星号(
*
)表示前一部分可以重复零次或多次。 -
一个或多个这样的角色
[^a-zA-Z0-9]+
这里的加号(
+
)表示前一部分可以重复一次或多次。 -
一个完整的(可能是空的)字符串,仅包含此类字符
^[^a-zA-Z0-9]*$
这里,字符
^
和$
具有锚点的含义,分别匹配字符串的开头和结尾。 这可以确保整个字符串由不在该字符类中的字符组成,并且在它们之前或之后没有其他字符。 -
完整(非空)字符串,仅包含此类字符
^[^a-zA-Z0-9]+$
详细说明,这不会(也不能)确保您不会使用任何其他字符,可能来自其他脚本。 字符串аеΒ
对于上面的正则表达式是完全有效的,因为它使用来自希腊语和西里尔语的字母。 此外还有其他陷阱。 字符串á
将在正则表达式之上传递,而字符串́a
将不会传递(因为它构造字母a中的字母and和组合变音符号)。
因此,有时候必须谨慎对待否定的角色类。
我也可以使用其他脚本中的数字,如果我想: ١٢٣
🙂
您可以使用字符类
[^\p{L&}\p{Nd}]
如果你需要照顾上面的事情。
遵守当地环境使用:
[^[:alnum:]]
只是否定class级:
[^A-Za-z0-9]