【问题标题】:c# Regular Expression no match - when there should bec#正则表达式不匹配-什么时候应该有
【发布时间】:2016-02-09 14:19:54
【问题描述】:

我正在尝试匹配0个或多个引号(")之间的字母、数字和空格字符串,这些集合可以用空格分隔或不分隔,字符串将以关键字开头以识别如何处理匹配的集合。

最简单的例子如下:

\\ inString = test "1" "a""3";
Regex regEx = new Regex("@(\"[0-9 a-z]*\")", RegexOptions.IgnoreCase);
Match match = regEx.Match(inStr);

匹配不成功,更别提包含3个预期结果

但是通过http://regexhero.net 匹配成功 - 我使用 regexhero 作为其 SilverLight 基础,所以使用 .NET Regex 引擎...

Regexhero 设置:

正则表达式

(\"[0-9 a-z]*\")

目标字符串

test "1" "b""3"

结果

1: "1"
1: "b"
1: "3"

谁能解释我的实现有什么问题?

【问题讨论】:

  • 逐字字符串文字中的双引号必须用"" 声明。我猜你想要@"""[0-9 a-z]*"""。请参阅正则表达式的demo。我认为这只是一个错字。我建议结束这个问题。
  • 我刚刚注意到 @ 在字符串中。为什么会在那里?如果它在外面,你需要双引号(正如@WiktorStribiżew 指出的那样)。里面没有任何意义
  • 接受了下面的答案 - 是的,这是一个错字。
  • @Morvael 看看我的回答你必须做出更多改变
  • @goodeinstein 是的,我知道 - 这只是示例代码,实际实现看起来与问题中的代码不太一样。只是我把@放错了地方,然后给它开了一个盲点。

标签: c# regex


【解决方案1】:

我希望您的正则表达式应该是:

Regex regEx = new Regex("(\"[0-9 a-z]*\")", RegexOptions.IgnoreCase);

或(完全相同)

Regex regEx = new Regex(@"(""[0-9 a-z]*"")", RegexOptions.IgnoreCase);

看起来这个问题对你来说可能是一个富有成果的阅读:

What's the use/meaning of the @ character in variable names in C#?

【讨论】:

    【解决方案2】:

    您必须更改正则表达式模式:

    "@(\"[0-9 a-z]*\")"
    

    @"(""[0-9 a-z]*"")"
    

    你也需要改变

    Match match = regEx.Match(inStr);
    

    MatchCollection match = regEx.Matches(intstr); 
    

    因为Matches 在输入字符串中搜索所有出现的正则表达式并返回所有匹配项,但Match 在指定的输入字符串中搜索第一次出现的正则​​表达式

    如果你想要这样的结果:

    1: "1"
    1: "b"
    1: "3"
    

    你需要改成Matches

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-10
      • 2014-07-31
      • 2018-06-23
      • 1970-01-01
      • 2022-01-04
      相关资源
      最近更新 更多