Python 为什么可以';我不能拿出一些ID';使用正则表达式的一些字符串是什么?

Python 为什么可以';我不能拿出一些ID';使用正则表达式的一些字符串是什么?,python,regex,python-3.x,Python,Regex,Python 3.x,我试图从一些字符串中找出一些ID。我想从每个字符串中获取的部分介于bd-和?之间。后者并不总是存在,因此我希望将此标志设置为可选。我知道我可以使用字符串操作实现同样的效果,但我希望使用正则表达式也能实现同样的效果 我试过: import re content = """ id-HTRY098WE id-KNGT371WE?witkl id-ZXV555NQE?phnu eh-VCBG075LK """ for item in re.findall(r'id-(.*)\??',content):

我试图从一些字符串中找出一些
ID
。我想从每个字符串中获取的部分介于
bd-
之间。后者并不总是存在,因此我希望将此标志设置为可选。我知道我可以使用字符串操作实现同样的效果,但我希望使用正则表达式也能实现同样的效果

我试过:

import re

content = """
id-HTRY098WE
id-KNGT371WE?witkl
id-ZXV555NQE?phnu
eh-VCBG075LK
"""
for item in re.findall(r'id-(.*)\??',content):
    print(item)
它产生的产出:

HTRY098WE
KNGT371WE?witkl
ZXV555NQE?phnu
预期产出:

HTRY098WE
KNGT371WE
ZXV555NQE

如何从一些字符串中提取
ID

您可以使用带有否定字符类的捕获组来匹配问号或空白字符

使用
*
首次尝试的模式将一直匹配到字符串末尾。然后在字符串的末尾,它尝试匹配一个可选的问号
\??
。这将成功(因为它是可选的),从而匹配前3个示例的整个字符串

id-([^?\s]+)
|

比如说

import re

content = """
id-HTRY098WE
id-KNGT371WE?witkl
id-ZXV555NQE?phnu
eh-VCBG075LK
"""
for item in re.findall(r'id-([^?\s]+)',content):
    print(item)
结果

HTRY098WE
KNGT371WE
ZXV555NQE
或仅匹配字母数字:

id-([A-Z0-9]+)

或可能使捕获组不贪婪,直到
或字符串结束,例如:
r'id-(.*?[?\n]”
-那么您就不必担心id部分中可能包含的内容的标准…@JonClements,这确实有效,但前提是所有值都以换行符或问号结尾。