【问题标题】:Regular expression with .*? (dot-star-questionmark) matches too much?带有 .* 的正则表达式? (dot-star-questionmark) 匹配太多?
【发布时间】:2012-03-13 18:00:08
【问题描述】:

我有一个字符串:

zabcd1>abcf2 abcg3"abch,abcj4

我想得到:

  - abcd1
  - abcf2
  - abcg3
  - abcj4

获取前缀为(abc)后缀为数字的字符串,且只有一组(abc)。字符d, f, g, h, j可以替换成复杂的字符串,如:

t\t img src=\"img\/x.gif\" class=\"iRe

有人可以帮我吗?

【问题讨论】:

  • 您的要求不明确——abch,abcj4 绝对是一个以abc 开头并以数字结尾的字符串。你对自己想要的东西越模糊,就越不可能实现它。
  • 尝试编辑您的问题,是 abc 后跟一个数字,是任何字母后跟一个数字还是多个数字等?
  • 我添加了一些信息
  • 你能澄清一下要求“获取带前缀的字符串是(abc),后缀是数字”吗?前缀 (abc) 和后缀 (数字) 之间需要多少个字符?您所需结果的示例显示前缀和后缀之间只有 1 个字符。您的正则表达式和实际结果允许后缀和前缀之间有零个或多个字符。
  • 对不起,我的要求不高。我刚刚添加了一些信息。请帮忙。谢谢

标签: c# regex


【解决方案1】:

您似乎不想要abch,abcj4,因为它包含由非单词字符分隔的两部分。你很亲密:

abc\w*\d

\w 包括所有“单词”字符。相当于[A-Za-z0-9_]。见http://www.mikesdotnetting.com/Article/46/CSharp-Regular-Expressions-Cheat-Sheet

如果您想更具体一些,您可以采用[A-Za-z0-9_],它是一个字符类,并删除不'的部分(例如_0-9) t 适用于您的比赛。

【讨论】:

    【解决方案2】:

    您的正则表达式匹配 abc 后跟零个或多个不贪婪的 .*? 后跟数字 \d

    abc.*?\d
    

    您想匹配 abc 后跟零个或多个(可能)小写字母 [a-z]* 后跟数字 \d

    abc[a-z]*\d
    

    【讨论】:

      【解决方案3】:

      这样的东西对你有用吗?它正在寻找 abc,这是一组可选的字符,不能是逗号或数字,后跟数字。

      (abc[^,\d]*\d)
      

      【讨论】:

        【解决方案4】:

        您应该使用 * 或 ?量词,而不是两者。

        如果你想检查一个字符的 0 或 1,你应该使用 ?那么你的正则表达式将变为:

        abc.?\d
        

        .当然会匹配任何东西,而不仅仅是字母,所以如果你希望第 4 个字符只是一个字母,那么你会想要这样的东西:

        abc[a-zA-Z]?\d
        

        【讨论】:

        • 我不知道 OP 想要做什么,但 .*?syntax 是完全有效的。
        猜你喜欢
        • 1970-01-01
        • 2010-11-25
        • 2014-10-06
        • 2013-11-25
        • 1970-01-01
        • 2016-12-12
        • 2016-09-08
        • 1970-01-01
        • 2013-08-25
        相关资源
        最近更新 更多