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就像一把双刃剑。您需要知道在哪里申请,在哪里不申请,否则可能适得其反:)