2013-03-01 48 views
1

我想使用正则表达式匹配一个字符串,我非常接近它按照我想要的方式工作。REGEX匹配字符串包含可选分隔符内的内容

可以说我有一个字符串5A(TEST1),图4B,图3C(TEST2)

我要做的第一件事是分开打破串上的逗号,所以我在阵列

结束了3串
  • 5A(TEST1)
  • 4B
  • 3C(TEST2)

现在我想拉以下信息进行;数字,字母和括号中的内容。但括号是可选的。

这里是我的模式 ([1-9][0-9]*)([AaBbCcIiFfPpSs]+)(\(.*\))?

这个工程除了包括括号。所以我得到
5 A(TEST1)
时,我想是
5 test1的一个

香港专业教育学院还试图 ([1-9][0-9]*)([AaBbCcIiFfPpSs]+)\(([^)]*)\)?
但这并不在琴弦上没有括号匹配等等
5A (test1)和3C(test2)匹配,但4B不匹配。

任何援助将不胜感激。

回答

1

改变你的正则表达式位:

([1-9][0-9]*)([AaBbCcIiFfPpSs]+)(\((.*)\))? 

()内容将在捕获组4.

如果你的l anguage支持非捕获组(?:pattern)

([1-9][0-9]*)([AaBbCcIiFfPpSs]+)(?:\((.*)\))? 

这将避免不必要的捕获(节省一些内存),以及内部()内容将在捕获组3

+0

你的第二个答案似乎在服务器上运行得更快(在Perl中运行)所以谢谢,非常感谢:) – lvaughan 2013-03-01 17:13:04

1

您需要周围的可选的最后一部分额外的非捕获组

([1-9][0-9]*)([AaBbCcIiFfPpSs]+)(?:\(([^)]*)\))? 

看到它here on Regexr

+0

谢谢你,固定它完美! – lvaughan 2013-03-01 17:07:38

相关问题