python - 如何在python中使用正则表达式从字符串中提取这些子字符串?
问题描述
我正在用python构建一个模块,主要关注数学。我认为添加对数学系列的支持会很不错。我在实现算术级数和几何级数方面没有任何问题,但是在尝试实现递归级数时我偶然发现了一个问题。我想出了一个解决方案,但为此我首先需要从代表系列的用户输入字符串中提取系列的元素。我认为正则表达式可能是最好的选择,但它是我最大的世界上的恐惧症,所以我非常感谢您的帮助。
例如,对于像这样的字符串
"a_n = a_{n-1} + a_{n-2}"
我想要一套
{"a_n","a_{n-1}","a_{n-2}"}
它还需要支持更复杂的递归定义,例如:
"a_n*a_{n-1} = ln(a_{n-2} * a_n)*a_{n-3}"
该集合将是:
{"a_n","a_{n-1}","a_{n-2}","a_{n-3}"}
如果您认为这会使任务更容易,请随意进行一些小的语法更改。
解决方案
正则表达式很简单 a_(?:n|{n-\d})
a_
- 然后
- 任何一个
n
- 或者
{n-\d}
- 任何一个
import re
ptn = re.compile(r"a_(?:n|{n-\d})")
print(set(ptn.findall("a_n = a_{n-1} + a_{n-2}")))
# {'a_{n-1}', 'a_n', 'a_{n-2}'}
print(set(ptn.findall("a_n*a_{n-1} = ln(a_{n-2} * a_n)*a_{n-3}")))
# {'a_{n-1}', 'a_{n-3}', 'a_n', 'a_{n-2}'}
推荐阅读
- python - 馅饼切片python上的行值
- c# - Unity 游戏中的物理(钟摆效果)
- nix - 如何在 NixOS 中启用 Caddy 插件?
- swift - 如何为所有设备提供 sizeForItemAt indexPath 更好的解决方案?
- css - CSS 是否接受带有空格的文件夹名称?
- python - 如何从文本文件的列表中创建列表?
- reactjs - 使用带有 typescript 的 ag-grid-react 的错误
- google-cloud-platform - 调整启动磁盘 VM(Google Cloud)的大小后网站完全关闭
- c - 使用 gcc 时 c 结构中的“未知类型名称”
- matlab - 如何在 Matlab 中添加来自不同矩阵的 xlabel 刻度?