#python #regex #regex-lookarounds
#python #регулярное выражение #регулярное выражение-поиск
Вопрос:
У меня есть текстовые файлы, в которых есть данные примерно такого рода:
файл 1
var field = "123456";
файл 2
var field = abdxg@% "345789";
Итак, я использовал выражение регулярного выражения:
(?<=var fhID).*(?=;)
Это возвращает: = "123456"
в файле 1 и = abdxg@% "345789"
в файле 2.
Теперь мне нужно одно регулярное выражение, которое могло бы извлекать только цифры из строки после сопоставления с обходными путями, т.е. После изменения моего текущего выражения регулярного выражения я должен попасть 123456
в файл 1 и 345789
в файл 2.
Комментарии:
1. Ваше текущее регулярное выражение ничему не будет соответствовать. Это опечатка? В любом случае, вы могли бы использовать
(?<=var field).*"(d )"(?=;)
и находить свои цифры в группе 1. В этом случае вы можете вообще избавиться от обходных путей :var field.*"(d )";
.2. Да, это была опечатка, моя ошибка
Ответ №1:
Вы можете использовать это регулярное выражение и получить совпадающие цифры в группе захвата:
(?<=var field)[^;d]*(d )[^;]*(?=;)
Демонстрация регулярных выражений
кстати, это должно быть field
в lookbehind вместо fhID
.
Подробности регулярных выражений:
(?<=var field)
: Посмотрите назад, чтобы утверждать, что мы имеемvar field
перед текущей позицией[^;d]*
: Сопоставьте 0 или более любых символов, которые не;
являются и цифрой(d )
: Сопоставьте 1 цифры в группе захвата # 1[^;]*
: Сопоставьте 0 или более любых символов, которые не;
(?=;)
: Позитивный взгляд на то, чтобы утверждать, что у нас есть;
преимущество перед текущей позицией
Комментарии:
1. Произошла опечатка, мой плохой и спасибо за объяснение