Если мы хотим заменить .
и e
в научных числах, это выражение может сделать это, что я добавил несколько необязательных границ, так как я не был так уверен в других входных данных:
([-+]?\d+)(\.\d+)?((\.)(\d+)(e)([-+])(\d+))?
Имеет 8 групп захвата со всеми отделами научного номера, которые мы можем упростить при необходимости.
Проверка
# coding=utf8
# the above tag defines encoding for this document and is for Python 2.x compatibility
import re
regex = r"([-+]?\d+)(\.\d+)?((\.)(\d+)(e)([-+])(\d+))?"
test_str = ("-1.06581.4e-14\n"
"1.06581.4e-14\n"
"1.06581.4e+14\n"
"+1.06581.4e-14\n"
"+1.06581\n"
"1.06\n"
"1")
subst = "\\1\\2\\5\\8"
# You can manually specify the number of replacements by changing the 4th argument
result = re.sub(regex, subst, test_str, 0, re.MULTILINE)
if result:
print (result)
# Note: for Python 2.7 compatibility, use ur"" to prefix the regex and u"" to prefix the test string and substitution.
Схема RegEx
jex.im визуализирует регулярные выражения:
Demo
Этот фрагмент кода показывает, какработа групп захвата:
const regex = /([-+]?\d+)(\.\d+)?((\.)(\d+)(e)([-+])(\d+))?/gm;
const str = `-1.06581.4e-14
1.06581.4e-14
1.06581.4e+14
+1.06581.4e-14
+1.06581
1.06
1`;
const subst = `$1$2$5$8`;
// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);
console.log(result);