gpt4 book ai didi

Python 没有提取预期的模式

转载 作者:行者123 更新时间:2023-11-28 19:47:17 25 4
gpt4 key购买 nike

我是 RegEx 的新手,我正在尝试执行简单匹配以使用 re.findall 提取项目列表。但是,我没有得到预期的结果。您能否帮助解释一下为什么我还根据以下正则表达式模式获得了该字符串的第一部分,以及我需要修改哪些内容才能获得所需的输出?

import re
string = '''aaaa_1y345_xyz_orange_bar_1
aaaa_123a5542_xyz_orange_bar_1
bbbb_1z34512_abc_purple_bar_1'''

print(re.findall('_\w+_\w+_bar_\d+', string))

当前输出:

['_1y345_xyz_orange_bar_1', '_123a5542_xyz_orange_bar_1', '_1z34512_abc_purple_bar_1']

期望的输出:

['_xyz_orange_bar_1', '_xyz_orange_bar_1', '_abc_purple_bar_1']

最佳答案

\w 模式匹配字母、数字 _ 符号。根据 Python 版本和使用的选项,它可以匹配的字母和数字可能来自整个 Unicode 范围或仅来自 ASCII。

因此,解决此问题的最佳方法是将 \w 替换为 [^\W_]:

import re
string = '''aaaa_1y345_xyz_orange_bar_1
aaaa_123a5542_xyz_orange_bar_1
bbbb_1z34512_abc_purple_bar_1'''
print(re.findall(r'_[^\W_]+_[^\W_]+_bar_[0-9]+', string))
# => ['_xyz_orange_bar_1', '_xyz_orange_bar_1', '_abc_purple_bar_1']

参见 Python demo .

详细信息:

  • _ - 下划线
  • [^\W_]+ - 1 个或多个数字或字母字符([^ 开始否定字符类,\W 匹配任何非单词字符,添加 _ 以匹配除 _ 之外的任何单词字符)
  • _[^\W_]+ - 同上
  • _bar_ - 文字子字符串 _bar_
  • [0-9]+ - 1 个或多个 ASCII 数字。

参见 regex demo .

关于Python 没有提取预期的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45132825/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com