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

时间:2019-05-02 07:28:28

标签: 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"))

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

谢谢。

3 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

您应该删除量词{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.,因此仅在列表中显示该值。

答案 2 :(得分:0)

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

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.']