我正在尝试使用正则表达式匹配字符串,我非常接近让它以我想要的方式工作。
假设我有一个字符串5A(test1),4B,3C(test2)
我做的第一件事就是用逗号分隔字符串,所以我最终得到一个数组中的3个字符串
现在我想提取以下信息;括号中的数字,字母和内容。但括号是可选的。
这是我的模式
([1-9][0-9]*)([AaBbCcIiFfPpSs]+)(\(.*\))?
除了包含括号外,它的工作原理。所以我得到了
5 A(test1)
当我想要的是什么时
5 A test1
我也试过了
([1-9][0-9]*)([AaBbCcIiFfPpSs]+)\(([^)]*)\)?
但是如果没有括号那么这就不匹配了
5A(test1)和3C(test2)匹配但4B不匹配。
任何帮助都将不胜感激。
答案 0 :(得分:1)
答案 1 :(得分:1)
稍微更改你的正则表达式:
([1-9][0-9]*)([AaBbCcIiFfPpSs]+)(\((.*)\))?
()
内的内容将在捕获组4中。
如果您的语言支持非捕获组(?:pattern)
:
([1-9][0-9]*)([AaBbCcIiFfPpSs]+)(?:\((.*)\))?
这将防止不必要的捕获(节省一些内存),()
内的内容将在捕获组3中。