python - 给定字符串的正则表达式
问题描述
我遇到了一个小问题。我需要一个正则表达式,它可以分别将传递的字符串与数字分开,并将方括号内的任何字符块分开,并将常规字符串分开。
例如,如果我有一个类似于
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')]
我对正则表达式和学习非常陌生。如果这很简单,我很抱歉。
谢谢!
解决方案
直接的解决方法是摆脱捕获组并使用交替来匹配方括号字符以外的数字或字符:
import re
s = "2[abc]3[cd]ef"
res = re.findall(r"\d+|[^][]+", s)
print(res)
# => ['2', 'abc', '3', 'cd', 'ef']
\d+
- 一位或多位数字|
- 或者[^][]+
[
- 除了and之外的一个或多个字符]
其他可能有帮助的解决方案是:
re.findall(r'\w+', s)
re.findall(r'\d+|[^\W\d_]+', s)
where\w+
匹配一个或多个字母、数字、下划线和一些带有变音符号的连接标点符号,并[^\W\d_]+
匹配任何一个或多个 Unicode 字母。
请参阅此 Python 演示。
推荐阅读
- server - 是否有可能以类似于网络抓取的方式抓取计算机程序?
- c# - 有没有一种通用的方法来获取组件字段的名称?
- react-native - javascript应用程序中的编码
- amazon-web-services - 对象存储(例如 S3)和基于列的技术之间有什么区别
- haskell - 何时使用 Data.Coerce?
- javascript - 斐波那契数列函数产生不正确的值
- javascript - msg.mentions.users.first(),不运行
- c++ - 究竟什么是 std::thread?
- spring - Mockito 模拟 RestTemplate 产生 NullPointerException
- r - 在 Shiny 中获取用户输入(选择)后读取文件