首页 > 解决方案 > 如何在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}"}

如果您认为这会使任务更容易,请随意进行一些小的语法更改。

标签: pythonregex

解决方案


正则表达式很简单 a_(?:n|{n-\d})

  1. a_
  2. 然后
    • 任何一个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}'}

推荐阅读