首页 > 解决方案 > 给定字符串的正则表达式

问题描述

我遇到了一个小问题。我需要一个正则表达式,它可以分别将传递的字符串与数字分开,并将方括号内的任何字符块分开,并将常规字符串分开。

例如,如果我有一个类似于

s = 2[abc]3[cd]ef 

我需要一份清单lst = ['2','abc','3','cd','ef']

到目前为止,我有一个代码有这个..

import re
s = "2[abc]3[cd]ef"
s_final = ""
res = re.findall("(\d+)\[([^[\]]*)\]", s)
print(res)

这正在输出一个看起来像这样的元组列表。

[('2', 'abc'), ('3', 'cd')]

我对正则表达式和学习非常陌生。如果这很简单,我很抱歉。

谢谢!

标签: pythonregex

解决方案


直接的解决方法是摆脱捕获组并使用交替来匹配方括号字符以外的数字或字符:

import re
s = "2[abc]3[cd]ef"
res = re.findall(r"\d+|[^][]+", s)
print(res)
# => ['2', 'abc', '3', 'cd', 'ef']

请参阅正则表达式演示Python 演示详情

  • \d+- 一位或多位数字
  • |- 或者
  • [^][]+[- 除了and之外的一个或多个字符]

其他可能有帮助的解决方案是:

re.findall(r'\w+', s)
re.findall(r'\d+|[^\W\d_]+', s)

where\w+匹配一个或多个字母、数字、下划线和一些带有变音符号的连接标点符号,并[^\W\d_]+匹配任何一个或多个 Unicode 字母。

请参阅此 Python 演示


推荐阅读