我在学习python的初期,很抱歉,如果已经问过这个问题。我在这里写这些是没有帮助的,我的要求是读取文件并打印其中的所有URL。在for循环中,我使用的regex模式为[^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
如果您知道url始终以https://
开头,那么它将是前八个字符。然后,您可以在找到网址后获得长度:
# Example of list containing urls - you should fill that with your for loop
list_urls = ['https://stackoverflow.com/questions/61006253/use-dynamic-int-variable-inside-regex-pattern-python', 'https://google.com', 'https://stackoverflow.com']
for url in list_urls:
print(len(url[8:]))
出
89
10
17
一种选择是使用文字字符串内插。假设链接不包含空格,则可以使用\S
代替[\w\W]
,因为后者的变体将匹配包括空格和换行符在内的任何字符。
\bhttps://\S{{{var}}}(?!\S)
最后的断言(?!\S)
是空白边界,以防止部分匹配。
例如
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']