2010-12-23 99 views
3

我将有以下可能的字符串:正则表达式帮助

12_3

12_3 + 14_1 + 16_3-400_2

的数字可能会有所不同,但我什么寻找的是X_X数字模式。但是,我需要做一个替换,它将搜索2_3,而不是将12_3作为有效匹配返回。

+/-是'arthemtic符号,可以是任何有效值。他们还需要ARENT(在第一个例子中)..所以,我可能想检查一个只有12_3的字符串,如果我通过2_3,它不会返回匹配。只有当我通过12_3。

这是一个C#脚本。

非常感谢您的帮助!我是愚蠢的正规表达式。

+2

我不明白过多的“问题”只不过是要求我们为你做你的工作。有很多方法可以通过阅读伟大的书籍(如Mastering Regular Expressions)或RegEx Buddy等软件来学习正则表达式。无论哪种方式,都没有任何理由要求提出正则表达式问题,而不会显示任何先前尝试过的表达方式。 – 2010-12-23 03:03:31

+0

@Frazell - 这是此用户的第五个问题,以及他/她的第一个正则表达式问题。如果您认为存在一般性问题,请在[meta](http://meta.stackoverflow.com/)上开始提问,但这里基本上是噪音。 – Kobi 2010-12-23 05:10:24

回答

2

好,我们有,即: 2_3 + 12_3 + 14_1 + 16_3-400_2 + 2_3

的regexp#1:

Regex r1 = new Regex(@"\d+(\d_\d)"); 
MatchCollection mc = r1.Matches(sourcestring); 

相配实测值:

[0] [0 ] = 12_3 [0] [1] = 2_3

[1] [0] = 14_1 [1] [1] = 4_1

[2] [0] = 16_3 [2] [1] = 6_3

[3] [0] = 400_2 [3] [1] = 0_2

的regexp#2:

Regex r2 = new Regex(@"\d+\d_\d"); 
MatchCollection mc = r2.Matches(sourcestring); 

相配实测值:

[0] [0] = 12_3

[1] [0] = 14_1

[2] [0] = 16_3

[3] [0] = 400_2

在这里,你在找什么?

+0

感谢您的支持!我有一个类似的模式,你的第二个,但我无法弄清楚,如果我需要做多个模式的数字计数在左侧和右侧_ ..非常有帮助! – dpluscc 2010-12-23 03:11:26

2

\b\d+_\d+\b

\d是数字,\b是一个零宽度的字边界。看到这C# regex cheat sheet

更新:我只是寻找一个“C#正则表达式备忘单”来验证\b是一个字边界(它是\<\>在grep中)。这是第一个结果。我没有真正验证文字。无论如何,我现在链接到一个不同的备忘单。