为什么我不能使用正则表达式从某些字符串中找出一些ID?

时间:2019-07-29 12:28:40

标签: 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):
    print(item)

输出它产生:

HTRY098WE
KNGT371WE?witkl
ZXV555NQE?phnu

预期输出:

HTRY098WE
KNGT371WE
ZXV555NQE

如何从某些字符串中刮除ID

1 个答案:

答案 0 :(得分:5)

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

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

id-([^?\s]+)

Regex demo | Python demo

例如

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]+)

Regex demo