используйте динамическую переменную c int внутри шаблона регулярного выражения python - PullRequest
0 голосов
/ 03 апреля 2020

Я в первые дни обучения python, извините, если этот вопрос уже был задан.

Я пишу здесь, поскольку они мне не помогли, мое требование - прочитать файл и распечатав все URL внутри него. Внутри a для l oop шаблон регулярного выражения, который я использовал, был [^https://][\w\W]*, он работал нормально. Но я хотел знать, могу ли я динамически передать длину строки после https: // и получить результат с вхождениями вместо *

Я пытался [^https://][\w\W]{var}}, где var=len(line)-len(https://)

Это некоторые другие шаблоны, которые я пробовал, например

pattern = '[^https://][\w\W]{'+str(int(var))+'}'

pattern = r'[^https://][\w\W]{{}}'.format(var)

pattern = r'[^https://][\w\W]{%s}'%var

Ответы [ 2 ]

0 голосов
/ 03 апреля 2020

В вашем паттерне вы используете [^https://], который является отрицательным классом символов [^, который будет соответствовать любому символу, кроме перечисленного.

Один из вариантов - использовать буквенную строку интерполяция. Предполагая, что ваши ссылки не содержат пробелов, вы можете использовать \S вместо [\w\W], так как последний вариант будет соответствовать любому символу, включая пробелы и символы новой строки.

\bhttps://\S{{{var}}}(?!\S)

Regex demo

Утверждение (?!\S) в конце является границей пробела для предотвращения частичных совпадений, а граница слова \b не позволит http быть частью большего слова.

Python демо

Например

import re
line = "https://www.test.com"
lines = "https://www.test.com https://thisisatestt https://www.dontmatchme"

var=len(line)-len('https://')
pattern = rf"\bhttps://\S{{{var}}}(?!\S)"

print(re.findall(pattern, lines))

Вывод

['https://www.test.com', 'https://thisisatestt']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...