Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 为什么正则表达式匹配不是我所期望的?_Regex_Python 3.x - Fatal编程技术网

Regex 为什么正则表达式匹配不是我所期望的?

Regex 为什么正则表达式匹配不是我所期望的?,regex,python-3.x,Regex,Python 3.x,我尝试实现下面的代码,但打印出来的不是我所期望的 import re def regex_search(txt): lst = re.findall(r'(\d{1,3}\.){3}', txt) return lst print(regex_search("123.45.67.89")) 它会在我预期的时间打印出[67.][123.][45.][67.]。我错在哪里?请帮忙 提前感谢。您应该删除量词{3},也不要额外分组并编写此代码 import re def rege

我尝试实现下面的代码,但打印出来的不是我所期望的

import re

def regex_search(txt):
    lst = re.findall(r'(\d{1,3}\.){3}', txt)
    return lst

print(regex_search("123.45.67.89"))
它会在我预期的时间打印出[67.][123.][45.][67.]。我错在哪里?请帮忙


提前感谢。

您应该删除量词
{3}
,也不要额外分组并编写此代码

import re

def regex_search(txt):
    lst = re.findall(r'\d{1,3}\.', txt)
    return lst

print(regex_search("123.45.67.89"))
打印您的预期输出

['123.', '45.', '67.']

另外,当您使用这个
(\d{1,3}\){3}
,那么它将正好匹配这个
\d{1,3}中的三个\.
重复三次,这将是
123.45.67。
作为整个匹配,但组1将只捕获最后一个匹配,即
67。
在您的情况下,因此只在列表中打印该值。

我稍微更改了您的正则表达式,现在它应该可以工作了

import re

def regex_search(txt):
    lst = re.findall(r'(\d{1,3}\.)', txt)
    return lst

print(regex_search("123.45.67.89"))
现在输出将是

['123.', '45.', '67.']
您也可以在不使用正则表达式的情况下执行此操作,在
上拆分并忽略最后一个元素

import re

def regex_search(txt):
    items = txt.split('.')[:-1]
    return [item+'.' for item in items]

print(regex_search("123.45.67.89"))
输出将是

['123.', '45.', '67.']

这里甚至不需要使用正则表达式:

input = "123.45.67.89"
parts = input.split(".")
parts = [s + "." for s in parts]
parts = parts[:-1]
print(parts)

['123.', '45.', '67.']

你的实际预期产出是多少?为什么您不想同时添加IP地址的
89
最终组件?你为什么要把经期包括在内?哦,我明白了。我从一开始就错了。现在我不明白为什么它不用这个
(\d{1,3}){3}
['123.45.67.]
那样打印smt。相反,只匹配
['67.]
@Zarkos:您的正则表达式有点不正确。正则表达式是一个很好的工具,有时非常有用。我建议你至少要熟悉它的基本知识。它包含了关于基本正则表达式的好信息,并且对真正有用的网站也有很好的参考。是的,我知道它很有用,但不是对所有情况都有用,而且它比内置方法慢。我学习regex的教程也这么说。我只是想在我学到了一些基本的东西之后再使用它,但是我被这个量词所困扰,不明白为什么它不能像我期望的那样工作,并且只匹配“67”。@Zarkos:Regex就像一把双刃剑。您需要知道在哪里申请,在哪里不申请,否则可能适得其反:)