正则表达式:不带纯数字的字母数字

时间:2019-01-30 09:54:56

标签: python regex

我需要从一个函数字符串中提取的变数名称。

变量可以是[a-zA-Z0-9] +,但不是表示为1、3.5、1e4、1e5 ...的实数。

有一个聪明的方法吗?

下面是一个M(不)在Python:

import re
pattern = r"[a-zA-z0-9.]+"
function_string = "(A+B1)**2.5"
re.findall(pattern, function_string)

上面的代码返回:

A, B1 and 2.5.

我想要的输出是

A and B1.

这是测试正则表达式的一种好方法: https://regex101.com/r/fv0DfR/1

2 个答案:

答案 0 :(得分:1)

std::shared_ptr

输出:

import re
pattern = r'[a-zA-Z_][a-zA-Z0-9_]{0,31}'
function_string = "(A+B1)2.5"

print(re.findall(pattern, function_string))

答案 1 :(得分:0)

尝试此正则表达式:

\b(?!\d)[a-zA-Z0-9]+

Click for Demo

说明:

  • \b-匹配单词边界
  • (?!\d)-前瞻,以确保下一个字符不是数字。这将确保变量名称不以数字开头。也将排除诸如1e3
  • 之类的词
  • [a-zA-Z0-9]+-匹配1个以上的字母或数字

如果您还希望这些变量也以数字开头并且是字母数字,则可以使用\b(?!\d+(?:[eE]\d+)?\b)[a-zA-Z0-9]+