REGEX匹配字符串包括可选分隔符内的内容

时间:2013-03-01 16:56:17

标签: regex string parentheses

我正在尝试使用正则表达式匹配字符串,我非常接近让它以我想要的方式工作。

假设我有一个字符串5A(test1),4B,3C(test2)

我做的第一件事就是用逗号分隔字符串,所以我最终得到一个数组中的3个字符串

  • 5A(TEST1)
  • 4B
  • 3C(TEST2)

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

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

除了包含括号外,它的工作原理。所以我得到了 5 A(test1)
当我想要的是什么时 5 A test1

我也试过了 ([1-9][0-9]*)([AaBbCcIiFfPpSs]+)\(([^)]*)\)?
但是如果没有括号那么这就不匹配了 5A(test1)和3C(test2)匹配但4B不匹配。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

在可选的最后一部分

周围需要一个额外的非捕获组
([1-9][0-9]*)([AaBbCcIiFfPpSs]+)(?:\(([^)]*)\))?

here on Regexr

答案 1 :(得分:1)

稍微更改你的正则表达式:

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

()内的内容将在捕获组4中。

如果您的语言支持非捕获组(?:pattern)

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

这将防止不必要的捕获(节省一些内存),()内的内容将在捕获组3中。

相关问题