正则表达式。*? (dot-star-questionmark)匹配太多了?

时间:2012-03-13 18:00:08

标签: c# regex

我有一个字符串:

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

有人可以帮助我吗?

4 个答案:

答案 0 :(得分:3)

好像你不想要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_],这是字符类并删除部分(例如_或{{1 }})不适用于你的比赛。

答案 1 :(得分:2)

您的正则表达式与abc匹配,后跟零或更多内容非贪婪.*?后跟数字\d

abc.*?\d

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

abc[a-z]*\d

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

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

abc.?\d

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

abc[a-zA-Z]?\d