测试重新编译“运行中”已编译,结果为空,而不是无

我正在尝试测试一堆正则表达式案例(特别是如果某些东西是度量单位:5px,300mm等)。

我能找到的所有关于re.match的问题都告诉我,我对此进行了如下测试:

import re

test_phrase_good = "5kw"
test_phrase_bad = "5XXX"
registered_units_regex = re.compile('[0-9]+kw|[0-9]+mm', re.IGNORECASE)

# test in the following way:
registered_units_regex.match(token) is not None

# so:
print(registered_units_regex.match(test_phrase_good)) # <re.Match object; span=(0, 3), match='5kw'>
print(registered_units_regex.match(test_phrase_bad)) #  None

如预期的那样。

但是,如果我想循环编译一个正则表达式,则会得到以下信息:

regex_units = [r"mm", r"kw"]
regex_string = r""
for unit in regex_units:
    regex_string += r'[0-9]+{}|'.format(unit)

regex_string = regex_string.rstrip('|')

registered_units_regex = re.compile(regex_string, re.IGNORECASE)
registered_units_regex.match(test_phrase_good) is not None

# so:
print(registered_units_regex.match(test_phrase_good)) # <re.Match object; span=(0, 3), match='5kw'>
print(registered_units_regex.match(test_phrase_bad)) #  <re.Match object; span=(0, 0), match=''>

which means i can no longer use is None as a test.

为什么是这样?以及如何正确测试不匹配?