Регулярное выражение: алфавитно-цифровые без чистых чисел - PullRequest
0 голосов
/ 30 января 2019

Мне нужно извлечь имена переменных из строки функции.

Переменная может быть [a-zA-Z0-9] +, но не действительное число, помеченное как 1, 3.5, 1e4, 1e5 ...

Есть ли умный способ сделать это?

Вот М (не) МЫ в python:

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

Theкод выше возвращает:

A, B1 and 2.5.

Мой желаемый вывод -

A and B1.

И вот хороший способ проверки регулярных выражений: https://regex101.com/r/fv0DfR/1

Ответы [ 2 ]

0 голосов
/ 30 января 2019
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))

ВЫХОД:

['A', 'B1']
0 голосов
/ 30 января 2019

Попробуйте это регулярное выражение:

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

Нажмите для демонстрации

Объяснение:

  • \b - соответствует границе слова
  • (?!\d) - отрицательный прогноз, чтобы убедиться, что следующий символ не является цифрой.Это позволит убедиться, что имя переменной не начинается с цифры.Также исключаются такие слова, как 1e3
  • [a-zA-Z0-9]+ - соответствует 1+ буквам или цифрам

Если вы хотите, чтобы переменные также начинались с цифры и были буквенно-цифровыми, вы можетеиспользуйте \b(?!\d+(?:[eE]\d+)?\b)[a-zA-Z0-9]+

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...