尝试创建一个正则表达式来查找一些字母组合后跟数字。像 ABC123,但它可能是 ABC 123,ABCID:123
reg = re.compile('(ABC(?:ID\:| )?\d*?)(?:$| |,|\t)',re.IGNORECASE)
这行得通,但是它自己也能找到 ABC..
有没有办法只有后面跟着数字才能找到它?
提前致谢
您将 *?
量词与 \d
一起使用,它匹配 0 或更多数字(尽可能少)。
你可以使用
r'ABC(?:ID:| )?\d+'
或
r'[a-z]+(?:ID:| )?\d+'
参见 regex demo
详细信息:
ABC
- ABC
子字符串(或 [a-z]+
以匹配 1 个或多个 ASCII 字母(注意编译模式时使用 re.I
标志将使 [a-z]
也能匹配大写 ASCII 字母))
(?:ID:| )?
- ID:
或空格出现 1 次或 0 次
\d+
- 1+ 位(+
是一个贪心量词,所以不需要用 (?: $| |,|\t)
组)。
请注意,如果您打算在 Python 2.x 中也匹配 Unicode 字母,则需要使用
re.findall(r'[^\W\d_]+(?:ID:| )?[0-9]+', s, flags=re.U|re.I)
re.U
标志将使 \W
和 \d
类识别 Unicode。
我是一名优秀的程序员,十分优秀!