我需要一个匹配ips的正则表达式,如192.1.2.33/23,但即使是空格或换行符,例如:
30.0.
0.0/24
我试过这个:
\b(((\s+)?[1-9](\s+)?[0-9]?(\s+)?[0-9]?(\s+)?)\.((\s+)?[0-9](\s+)?[0-9]?(\s+)?[0-9]?(\s+)?)\.((\s+)?[0-9](\s+)?[0-9]?(\s+)?[0-9]?(\s+)?)\.((\s+)?[0-9](\s+)?[0-9]?(\s+)?[0-9]?(\s+)?)\/((\s+)?[0-9](\s+)?[0-9]?(\s+)?))\b
但是效果不好......(也是,它太长了!)
感谢任何帮助。
修改
当我尝试将它与Python一起使用时,有时它会在有新行的情况下剥离数字。这是我使用的代码:
with open(r"AllText.txt") as fp:
for line in fp:
for i in re.finditer(regexp_v3, line):
print i.group()
例如,请尝试以下文字:
"172.18.177.240/28","ewwefwfwef","172.18.176.240/28","D.edwefwefwef
e_fe","172.18.230.0/24","172.18.177.128/28","dewefgw-1.wefre_fe","172.18.176.128/28","efSwefefef.eI-nc_rwefstowefe","17
2.18.183.0/24","PAT
编辑2:
问题是"您正在逐行读取文件,并且始终只对一行匹配您的正则表达式。如果只有行 b ,那么正则表达式应如何从行尾 a 开始匹配?"
所以,现在的问题是:我怎样才能一次性阅读所有""允许正则表达式看到一切?
答案 0 :(得分:1)
什么效果不好?
首次提示时,您可以将(\s+)?
替换为\s*
。这是一样的。
在开始和结束时,匹配空白也没有意义
有了这两个“改进”,你最终会在这里:
\b(([1-9]\s*[0-9]?\s*[0-9]?\s*)\.(\s*[0-9]\s*[0-9]?\s*[0-9]?\s*)\.(\s*[0-9]\s*[0-9]?\s*[0-9]?\s*)\.(\s*[0-9]\s*[0-9]?\s*[0-9]?\s*)\/(\s*[0-9]\s*[0-9]?))\b
您可以使用量词{0,2}
而不是重复char类
\b(([1-9](?:\s*[0-9]){0,2}\s*)\.(\s*[0-9](?:\s*[0-9]){0,2}\s*)\.(\s*[0-9](?:\s*[0-9]){0,2})\s*)\.(\s*[0-9](?:\s*[0-9]){0,2}\s*)\/((?:\s*[0-9]{1,2}))\b
它只有4个字符,但也更易读IMO,而不是重复可选的字符类。