python - re.search() 不匹配所有预期的字符串
问题描述
我有以下功能,我已将打印语句进行测试:
def parse_tag_id(id_string):
if not isinstance(id_string, str):
id_string = str(id_string)
if re.search(f'[0-9]{5}', id_string):
print(f'MATCH: #{id_string}#') # I put the '#' around each to make sure there are no hidden whitespaces.
else:
print(f'NO MATCH: #{id_string}#')
return None
然后,我将其应用于 pandas DataFrame 的列,并得到以下结果:
MATCH: #73844 / 73845#
MATCH: #73844 / 73845#
MATCH: #83793 / 84758#
MATCH: #73844 / 73845 / 84122 / 84136#
MATCH: #73844 / 73845 / 84136#
NO MATCH: #Not live yet#
NO MATCH: #83046# INCORRECT
MATCH: #84120 / 82795#
NO MATCH: #Not live yet#
NO MATCH: #Not live yet#
NO MATCH: #84264# INCORRECT
MATCH: #82795#
MATCH: #82795#
MATCH: #82795#
MATCH: #82795#
MATCH: #82795#
MATCH: #82795#
MATCH: #82795#
MATCH: #82795#
MATCH: #82795#
MATCH: #82795#
MATCH: #82795#
NO MATCH: #Not live yet#
NO MATCH: #Not live yet#
MATCH: #73844 / 73845#
NO MATCH: #78787 / 78788# INCORRECT
MATCH: #84856#
MATCH: #82795#
MATCH: #84857 / 82795#
MATCH: #82795#
MATCH: #82795#
NO MATCH: #Not live yet#
MATCH: #82795#
MATCH: #82795#
MATCH: #82795#
MATCH: #84845#
MATCH: #75891 / 75892#
MATCH: #75891 / 75892#
MATCH: #75891 / 75892#
MATCH: #75891 / 75892#
MATCH: #75891 / 75892#
MATCH: #75891 / 75892#
MATCH: #75891 / 75892#
MATCH: #75891 / 75892#
NO MATCH: #Not live yet#
NO MATCH: #Not live yet#
NO MATCH: #Not live yet#
MATCH: #82795#
MATCH: #82795#
MATCH: #82795#
MATCH: #82795#
MATCH: #82795#
MATCH: #82795#
MATCH: #82795#
MATCH: #83759#
NO MATCH: #Not live yet#
NO MATCH: #Not live yet#
NO MATCH: #84814# INCORRECT
MATCH: #84815#
NO MATCH: #Not live yet#
NO MATCH: #nan#
NO MATCH: #84118# INCORRECT
NO MATCH: #Not live yet#
NO MATCH: #84640# INCORRECT
MATCH: #84591#
NO MATCH: #84660# INCORRECT
MATCH: #82795#
MATCH: #82795#
MATCH: #82795#
MATCH: #82795#
MATCH: #75891 / 75892#
我希望所有带有一个 5 位数字或“/”分隔的 5 位数字列表的所有字符串都返回 true,但我在上面用“不正确”标记了不正确的字符串。
为什么这没有按预期工作?
解决方案
因为这:
>>> f'[0-9]{5}'
'[0-9]5'
>>> r'[0-9]{5}'
'[0-9]{5}'
f 字符串仅用于格式化。始终对正则表达式使用 r 字符串以避免双重转义。
推荐阅读
- python - 在 Python 中使用 re.search(pattern, text) 提取两个指定子字符串之间的子字符串
- android - 未解决的参考:在 lateinit 属性上的 isInitialized
- c# - Autofac 程序集扫描注册期间未找到程序集错误
- python - 如何找到给定数字中有多少个数字?
- c - 如何在C中找到数组中的最大和最小元素?
- c# - 切换开关在 AJAX 加载的视图中不起作用
- reactjs - 使用 UseState React Hook 从子组件更新父组件状态
- python - 为 python 设置 coc.nvim
- python - 如何计算一个非常非常大的数字并将其写入python中的文件?
- oauth-2.0 - 从 1 个刷新令牌生成不同的访问令牌范围