正则表达式:提取包含字符串中包含特定字母的所有元素

时间:2018-05-01 13:33:00

标签: python regex string

我正在构建一个简单的方程求解器,并且无法隔离元素。基本上,有两种类型的元素:整数(-12,+ 9)和变量(-3x,-7x,-2x)。我的策略的第一步是使用正则表达式来隔离这两种不同类型的元素:

while True:
    tmp = '0'
    if (console.readable()):
        tmp = input()

    ... #some tasks

我的正则表达式有两个问题:

  1. 它返回一个元组列表

    [(' -3x',' 3'),(' -7x',' 7'),(' ; -2x',' 2')]

    而不是列表:[' x',' -3x',' -7x',' -2x']

  2. 它省略了第一个元素,因为没有数字(2x可以工作)。

  3. 感谢您的帮助!

    P.S。:我有信心,通过一些研究,我可以编写正则表达式来提取仅数字元素(-12,+ 9),但我真的很难接受这个。

1 个答案:

答案 0 :(得分:2)

要获取“变量”,您可以使用

re.findall(r'[+-]?\d*[a-z]', t)

请参阅regex demo

详情

  • [+-]? - 可选的-+字符
  • \d* - 0+位数
  • [a-z] - 任何小写的ASCII字母(添加+以匹配其中的一个或多个)。

要获取整数而不包括最后一个数字(=之后),您可以使用

re.findall(r'[-+]?\b\d+\b(?!$)', t)

请参阅another regex demo

<强>详情

  • [-+]? - 可选的+-
  • \b\d+\b - 1个数字作为整个单词
  • (?!$) - 不在字符串的末尾。如果可以有尾随空格,请替换为(?!\s*$)