我正在尝试从某些字符串中提取一些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
?
答案 0 :(得分:5)
您可以使用具有否定字符类的捕获组来匹配问号或空白字符。
您首先尝试使用的模式会使用.*
匹配到字符串的结尾。然后,在字符串的末尾,它尝试匹配可选的问号\??
。这将成功(因为它是可选的),从而使前三个示例匹配整个字符串。
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]+)