【问题标题】:Regex for special characters?特殊字符的正则表达式?
【发布时间】:2013-03-03 13:56:29
【问题描述】:
string Val = Regex.Replace(TextBox1.Text, @"[^a-z, A-z, 0-9]", string.Empty);

此表达式与字符 ^ 和 _ 不匹配。我应该怎么做才能匹配这些值?

还有一点,如果TextBox1.Text字符串值大于10,最后一个字符串值(第11个字符串值)应该匹配。

【问题讨论】:

  • 你想问什么究竟..
  • 对于插入符号,您只需要使用反斜杠 \^ 对其进行转义,而对于下划线 _,您无需转义,我无法理解您关于字符串长度的最后一个问题,请注意强调??
  • 这个表达式 @"[^a-z, A-z, 0-9]" 将匹配 ^ 和 _ 的所有剩余值。但我需要表达式来匹配这两个值。
  • 如果字符串值超过 10 个字符,最后一个字符应该算术。我的意思是,这里的 q1q2q1q2q2W W 应该匹配。
  • btw:表达式应该是[a-zA-z0-9^_],不带逗号和空格,否则空格和逗号也会匹配。

标签: c# regex


【解决方案1】:

请注意,^ 括在方括号中时具有特殊含义。这意味着匹配除字符类中指定的以外的所有内容,基本上是'[]'。

如果要匹配"^" 和"_",请将插入符号(^) 放在左括号之后的另一个位置,就像这样,使用重复来限制字符长度:

[\W_]

这将确保整个字符串中的字符为 10。

或者您使用斜杠"\^" 转义它。

string Val = Regex.Replace(TextBox1.Text, @"[\W_]", string.Empty);

【讨论】:

  • 如果我使用这个表达式 [^\w],我会得到结果。但我想限制字符长度。只允许十个字符。我该怎么办?
  • @ASHOKA 检查我的答案,我添加了字符限制。
  • @Kata:ASHOK 故意使用否定字符类。他只是碰巧否定了比他想象的更多的角色。看我的回答。
  • 呃,你的正则表达式只修改字符串(通过删除它)如果它完全由不需要的字母组成(并且只有当它的长度小于 1 个字符时)——这根本不是我们想要的。
  • @TimPietzcker 帮助我理解!我的理解是他想匹配任何不是字符的东西,可以用否定字符类“\ W”捕获,但他也想匹配我明确添加到正则表达式中的下划线“_”?我做错了什么?
【解决方案2】:

你的问题是A-z。

这匹配所有 ASCII 字母 A 到 Z,然后是位于 Z 和 a 之间的字符(其中包括 ^ 和 _),然后是 a 和 z 之间的所有 ASCII 字母。这意味着 ^ 和 _ 不会与您的正则表达式匹配(以及您在正则表达式中包含的逗号和空格)。

澄清一下,你的正则表达式也可以写成

[^a-zA-Z0-9\[\\\]^_` ,]

你可能想要

string Val = Regex.Replace(TextBox1.Text, @"[^a-zA-Z0-9]", string.Empty);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-13
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 2013-09-19
    • 1970-01-01
    • 2017-08-14
    相关资源
    最近更新 更多