2015-07-10 374 views
1

我需要帮助生成正则表达式,使其将匹配具有以下详细正确的任何字符串:c#正则表达式来匹配字符串的结尾?

  1. 字符串应该与它里面支架和只有数字结束。
  2. 结束括号应该只在行尾出现一次,而不是在其他地方出现 。
  3. 任何字符托架之前允许开始
  4. 没有字符托架结束之后被允许
  5. 字符串应该只包含1组括号以数字,即没有双括号状((或))

我试过这.\([0-9]+\)$但这不是我所要求的。

例如:

以下字符串应该匹配:

asds-xyz (1) 
asds+-xyz (12) 
[email protected] (123) 

以下字符串不应该匹配:

asds-xyz ((1) 
asds-xyz ((12sdf)) 
(123) asds-xyz 
xyz ((2) 
XYX (1)) 
XYZ (1)(2) 
xyz(1)BXZ 
xyz(1)BXZ(2) 

回答

2
^[^\(\)]*\(\d+\)$ 

会做工作...

\d = [0-9]

+0

谢谢。它的测试字符串正常工作。否定团体是我错过的 – Sandeep

1

我尽量以最小的变化,以您的方式来解决: 你必须使用[^键在您希望的括号之前排除方括号。这样

[^\(\)]*\([0-9]+\)$ 

那会找到你喜欢的图案,如果你喜欢整个字符串是这样的,那么只需要添加一个^在开始

+0

它XYZ(1)(2)','ASDS-XYZ((1)','XYZ((2)'和'XYZ(1)BXZ(匹配' 2)'但不应该。 –

+0

@Verarind no,w ith ^一开始就不会 – n00b

+0

测试一下!你的正则表达式在任何时候都不会包含'[^ \(\)]''''。任何可能都是零,这发生在所有指定的情况下。但是第二个事实是什么呢,一个支撑杆会来到弦中的任何地方,但最后呢?你需要一个从开始就不应该被束缚的解决方案。但是这个ancor缺失。 –

0

从您的正则表达式开始:.\([0-9]+\)$ 。匹配一切,但你需要量化这一点。所以加*本 .*\([0-9]+\)$ 但问题是,它会匹配(和),如xyz ((2) 最后括号前那么让这个负面集,最后的结果是:

^(.*[^\(\)])(\([0-9]+\))$ 
+0

它匹配'xyz(1)BXZ(2)'但不应该。 –