【问题标题】:Match an expression in pattern matching 0 or more times C#匹配模式中的表达式匹配 0 次或多次 C#
【发布时间】:2014-04-04 19:57:57
【问题描述】:

我在 Visual Studio 2010 中使用 C# 模式匹配和正则表达式。

所以我的问题是我想匹配如下字符串:

dog1dog235cat7 获奖者

lizard2433cat23dog44 失败者

dog23 获奖者

我有字母后跟一些数字,然后是 0 个或多个字母/数字组合。总会有一个空格,后面跟着一些短语。

我正试图弄清楚如何区分诸如“dog7 骨头和零食”之类的东西。

我目前想出的模式是:

[a-zA-Z]+[0-9]+([a-zA-Z]+[0-9]+)*\s\w

问题是我没有找到任何关于测试出现 0 次或更多次的模式块的好信息。所以我不知道是否有一个好的分组字符表明这个块可以出现0次或更多次。我正在尝试使用 ([a-zA-Z]+[0-9]+)* 中的括号进行此操作,尽管我相信这通常与 Group 一起使用关键字提取模式的一部分实例供以后使用。

那么有谁知道我怎样才能检查 [a-zA-Z]+[0-9]+ 的模式片段是否出现 0 次或更多次? p>

(我环顾四周,但我还没有看到关于匹配出现 0 次或更多次的一组字符的 C# 版本。


如果它有助于我将字符串与模式进行比较。但我再次看到是否有办法区分额外的东西。由于“dog7 骨头和零食”确实有一个片段与我的模式匹配(dog7 骨头),但我想知道是否有办法说在这之后是否有额外的那么它不是匹配的(额外的是“和零食” )。

【问题讨论】:

  • 那么您期望例如来自dog1dog235cat7 Winners 的输出是什么?
  • 请更清楚地说明您要匹配的内容。当您运行 RegExp 时,C# 将返回一个 MatchCollection 对象,其中包含所有匹配项。我只是不确定您在字符串中到底要寻找什么。
  • 因此,如果您发现字母后跟数字,那么相同类型的字母/数字组合 0 次或多次,然后是空格和单词。但我不想捡起碰巧以字母开头后跟数字的东西,并在“dog7 骨头和零食”之类的东西上得到匹配。所以像我在我的问题中提出的东西就是我正在寻找的东西。
  • @pasty 我只是在查看字符串是否根据模式有效,但如果它们不是我想要的,我希望能有所限制。我正在寻找的东西->(ert744adc98 OneWord)我不寻找的东西->(ert744adc98 WordOne WordTwo WordN)。看起来仅模式匹配对传入字符串的限制不够。

标签: c# regex pattern-matching expression


【解决方案1】:

所以我一直在研究这个,从我在处理模式匹配时看到的情况来看,它更像是“什么匹配我正在寻找的东西”而不是“如果某些东西与这个完全不匹配然后拒绝”。根据我在 MSDN 上阅读的内容以及在多次查看 http://msdn.microsoft.com/en-us/library/ae5bf541(v=vs.80).aspx 后所尝试的内容,我得出的结论是,为了满足我的需要,我只需添加额外的代码来根据空格分割我的字符串,如果该分割的长度大于 2,然后我知道有我不想要的额外输入。比如

string[] words = myInput.Split(' ');
if(words.Length > 2)
    //ignore this string 

或者我也可以做相反的事情,检查长度是否为 2,如果是,那么我的工作很好。

我将使用模式匹配来确保字符串输入仍然是它们需要的,但我将不得不使用这些额外的东西来区分这些额外的不需要的东西。

但是,除非其他人知道如何在我寻找“AB23454 CD43”之类的内容时使“dog7 bones and Treats”之类的字符串可以忽略,否则这就是我的问题的解决方案。

【讨论】:

    猜你喜欢
    • 2015-11-14
    • 2020-10-10
    • 1970-01-01
    • 2022-10-04
    • 2023-03-16
    • 1970-01-01
    • 2023-03-18
    • 2012-01-28
    • 1970-01-01
    相关资源
    最近更新 更多