python - 正则表达式给出元组而不是完全匹配

标签 python regex python-3.x

我正在尝试使用正则表达式在网站上查找代理地址。目前我正在使用这段正则表达式 (\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/

相关文章:

python - 带集合的列表的不同列表

python - 为什么在查找/更新值时,Python dict比设置的效率更高?

python - 如何使用 Python 发送带有 .csv 附件的电子邮件

c# - 简单的正则表达式 [0-9]* 不适用于 C# 中的 {e|24}

php - URL 验证 javascript jquery

java - 在使用正则表达式之前如何清理输入?

python-3.x - 就地执行 numpy exp 函数

python - 如何删除 python 列表中的字符串的一部分?

python - 如何在 python 中指定异常参数?

python - 人们如何同时渲染这么多体素?