我正在尝试使用正则表达式在网站上查找代理地址。目前我正在使用这段正则表达式 (\d{1,3}\.){3}\d{1,3}:(\d+)
。它适用于 regexr.com在 sublime text 中,但是当我尝试在 Python 中使用它时,它无法按预期工作。
这是我正在使用的代码片段:
p = re.compile("(\d{1,3}\.){3}\d{1,3}:(\d+)")
ipCandidates = p.findall(soupString)
它应该像这样返回代理 120.206.182.172:8123
但它返回像这样的元组 ('44.', '3128')
。我该怎么做才能解决这个问题?
谢谢。
最佳答案
re.findall()
只返回捕获组的内容而不是整个匹配(如果你的正则表达式中有这样的组)。
然后,您将重复捕获组三次,这意味着只保留第三次重复(其他两次被覆盖)。
将您的正则表达式更改为
p = re.compile(r"(?:\d{1,3}\.){3}\d{1,3}:\d+")
你会得到完整的比赛。
如果你确实想要单独子匹配的元组(没有点和冒号),你也可以这样做,但是你不能使用重复:
p = re.compile(r"(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3}):(\d+)")
此外,始终对正则表达式使用原始字符串,因此不能混淆正则表达式转义序列和字符串转义序列。
关于python - 正则表达式给出元组而不是完全匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29130140/