我在正则表达式方面相当新,我遇到了一个我无法弄清楚的问题:
我正在尝试匹配以任意数量的 AZ、0-9 和 _ 字符开头的字符集,这些字符可以选择后跟一个括在一组括号中的数字,并且可以通过 a 与原始字符串分隔空间(或没有)
这应该找到的示例:
_ABCD1E
_123FD(13)
ABDF1G (2)
这是我当前的正则表达式:
[A-Z_0-9]+\s*\({0,1}[\d]*\){0,1}
它发现一切都很好,但是如果我有以下问题,就会出现问题:
_ABCDE )
它应该只抓取 _ABCDE 而不是“)”,但它当前抓取 '_ABCDE)'
如果整个模式不存在,是否有某种方法可以获取 (#) 但不会获得额外的字符?
如果可能的话,请解释我想要学习的语法,而不仅仅是得到答案。
答案:以下代码适用于我目前所需要的:
[A-Z_0-9]+(\s*\([\d]+\)){0,1}
# or, as has been mentioned, the above can be simplified
# and cleaned up a bit to be
[A-Z_0-9]+(\s*\(\d+\))?
# The [] around \d are unnecessary and {0,1} is equivalent to ?
在 (#) 模式周围添加括号允许使用 ? 或整个模式上的 {0,1}。我还将 [\d]* 更改为 [\d]+ 以确保括号内至少有一个数字。
感谢您的快速回答,所有!