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



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

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

当我期望['123.','45.","67.]时,它会打印出['67.]。我错在哪里?请帮忙。

提前谢谢。

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

input = "123.45.67.89"
parts = input.split(".")
parts = [s + "." for s in parts]
parts = parts[:-1]
print(parts)
['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.为整个匹配项,但 group1 将仅捕获在您的情况下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.']

最新更新