0

我有以下输出print var

test.qa.home-page.website.com-3412-jan
test.qa.home-page.website.net-5132-mar
test.qa.home-page.website.com-8422-aug
test.qa.home-page.website.net-9111-jan

我正在尝试在下面找到正确的拆分函数:

test.qa.home-page.website.com
test.qa.home-page.website.net
test.qa.home-page.website.com
test.qa.home-page.website.net

...以及删除重复项:

test.qa.home-page.website.com
test.qa.home-page.website.net

“com-”或“net-”之后的数值是随机的,所以我认为我的努力是找出如何rsplit ("-" + [CHECK_FOR_ANY_NUMBER])[0]. 任何建议都会很棒,在此先感谢!

4

3 回答 3

2

怎么样 :

import re

output = [
"test.qa.home-page.website.com-3412-jan",
"test.qa.home-page.website.net-5132-mar",
"test.qa.home-page.website.com-8422-aug",
"test.qa.home-page.website.net-9111-jan"
]

trimmed = set([re.split("-[0-9]", item)[0] for item in output])
print(trimmed)
# out : {'test.qa.home-page.website.net', 'test.qa.home-page.website.com'}
于 2021-05-11T21:31:43.567 回答
1

如果您有一个值数组,并且想要删除重复项,则可以使用set.

>>> l = [1,2,3,1,2,3]
>>> l
[1, 2, 3, 1, 2, 3]
>>> set(l)
{1, 2, 3}

str.split('-')[0]您可以通过-ing 每个值来获得有用的数组。

于 2021-05-11T21:29:35.667 回答
0

您可以使用正则表达式来解析各个行并使用集合理解来唯一化:

txt='''\
test.qa.home-page.website.com-3412-jan
test.qa.home-page.website.net-5132-mar
test.qa.home-page.website.com-8422-aug
test.qa.home-page.website.net-9111-jan'''

import re 

>>> {re.sub(r'^(.*\.(?:com|net)).*', r'\1', s) for s in txt.split() }
{'test.qa.home-page.website.net', 'test.qa.home-page.website.com'}

或者只是使用与标志相同的正set则表达式re.findallre.M

>>> set(re.findall(r'^(.*\.(?:com|net))', txt, flags=re.M))
{'test.qa.home-page.website.net', 'test.qa.home-page.website.com'}

如果您想保持秩序,请使用{}.fromkeys()(自 Python 3.6 起):

>>> list({}.fromkeys(re.findall(r'^(.*\.(?:com|net))', txt, flags=re.M)).keys())
['test.qa.home-page.website.com', 'test.qa.home-page.website.net']

或者,如果您知道您的目标始终是 2 -,只需使用.rsplit()with maxsplit=2

>>> {s.rsplit('-',maxsplit=2)[0] for s in txt.splitlines()}
{'test.qa.home-page.website.com', 'test.qa.home-page.website.net'}
于 2021-05-11T21:37:47.847 回答