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

rob*_*txt 5 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)
Run Code Online (Sandbox Code Playgroud)

输出它产生:

HTRY098WE
KNGT371WE?witkl
ZXV555NQE?phnu
Run Code Online (Sandbox Code Playgroud)

预期产量:

HTRY098WE
KNGT371WE
ZXV555NQE
Run Code Online (Sandbox Code Playgroud)

如何ID从某些字符串中刮掉?

The*_*ird 5

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

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

id-([^?\s]+)
Run Code Online (Sandbox Code Playgroud)

正则表达式演示 | Python演示

例如

import re

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

结果

HTRY098WE
KNGT371WE
ZXV555NQE
Run Code Online (Sandbox Code Playgroud)

或仅匹配字母数字:

id-([A-Z0-9]+)
Run Code Online (Sandbox Code Playgroud)

正则表达式演示