为了账号安全,请及时绑定邮箱和手机立即绑定

获取所有匹配的列表

获取所有匹配的列表

郎朗坤 2023-07-27 16:37:41
我试图在一个大字符串中获取完整的颜色列表(以十六进制表示),如下所示:'''#C4F407      // valid color#ZZZZZZ      // invalid colorHello there! // invalid color#F08         // invalid color45E097       // invalid color#FF00AA      // valid color...'''所以我编写了这个正则表达式来查找它们: ^#([A-F]|[0-9]){6}$ ,它匹配只有一种颜色的字符串。(我的意思是re.search('^#([A-F]|[0-9]){6}$', '#C456F7'))匹配#C456F7)但是,当我使用时, re.findall('^#([A-F]|[0-9]){6}$', largeString) 我得到了 [] 当我应该得到的时候['#C4F407', '#FF00AA']我怎样才能获得所有写得好的颜色的列表?
查看完整描述

1 回答

?
慕桂英546537

TA贡献1848条经验 获得超10个赞

问题是您仅在字符串范围内搜索。^仅匹配行开头和$行结尾。


由于您的字符串包含更多数据,^并且$不会匹配。


将您的正则表达式更改为(#(?:[A-F]|[0-9]){6}),它将正常工作:


>>> re.findall(r'(#(?:[A-F]|[0-9]){6})', largeString)

['#C4F407', '#FF00AA']

请注意,我?:在内括号中包含了 a,并且在外括号中包含了 a。这样,我们的正则表达式将不会捕获内括号内的内容,而只会捕获全颜色。


另请注意,我使用了r''正则表达式字符串。它表明 python 解释器不应解释转义字符,例如\b和 将它们留给正则表达式。我建议在所有正则表达式字符串上使用它们。


\b为了避免匹配超出第六个字符,您可以在正则表达式的末尾添加边框,例如(#(?:[A-F]|[0-9]){6})\b:


>>> largeString = '''

#C4F407      // valid color

#ZZZZZZ      // invalid color

Hello there! // invalid color

#F08         // invalid color

45E097       // invalid color

#FF00AA      // valid color

#0000000     // invalid color

...

'''

>>> re.findall(r'(#(?:[A-F]|[0-9]){6})\b', largeString)

['#C4F407', '#FF00AA']


查看完整回答
反对 回复 2023-07-27
  • 1 回答
  • 0 关注
  • 113 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信