import re
import exrex
def test_re(re_str):
for i in range(10):
test_str = exrex.getone(re_str)
res = re.fullmatch(re_str, test_str)
if not res:
print(f"FAIL: re_str {re_str} BAD: {test_str}")
return False
return True
# PASSES
assert test_re("^( [A-Za-z])[A-Za-z0-9]{6,}$")
# FAILS
assert test_re("^(?=.*[A-Za-z])[A-Za-z0-9]{6,}$")
第二个 RE 失败的原因是它包含一个 lookahead 断言:
前瞻断言“向前看”:它尝试匹配 具有给定模式的后续输入,但它不消耗任何 输入的位置 — 如果匹配成功,则为当前位置 输入保持不变。
特别是表达方式
?=.*
“向前看”。 exrex.getone
不支持此功能。