我尝试实现以下代码,但是打印出的不是我期望的
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。']。我哪里错了?请帮助。
谢谢。
答案 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.']