我想使用python anyprefix-emp-<employee id>_id-<designation id>_sc-<scale id>捕获以下模式
示例数据
strings = ["humanresourc-emp-001_id-01_sc-01","itoperation-emp-002_id-02_sc-12","Generalsection-emp-003_id-03_sc-10"]预期产出:
[('emp-001', 'id-01', 'sc-01'), ('emp-002', 'id-02', 'sc-12'), ('emp-003', 'id-03', 'sc-10')]我怎么才能用python做这件事。
发布于 2018-11-20 23:48:31
您还可以通过以下方法解决这个问题;
import re
regex = re.compile("(emp-.+)_(id-.+)_(sc-.+)")
strings = ["humanresourc-emp-001_id-01_sc-01","itoperation-emp-002_id-02_sc-12","Generalsection-emp-003_id-03_sc-10"]
print([regex.findall(s)[0] for s in strings])发布于 2018-11-20 14:11:31
[tuple(s[s.find("-") + 1:].split("_")) for s in strings]每个字符串都有一个很好的常规格式:
这些属性都由下划线:_隔开。
您的结果不需要描述,所以找到描述末尾的位置并删除它。我找到第一个连字符(-),然后只保留之后的一切。
然后,我使用split("_")将remaing字符串拆分为三个字符串。
这将返回您想要的三个部分,然后我将其放入一个元组中。
我对strings中的每个字符串执行此操作。
你可以把它放在这样的函数中:
def extract_tags(strings):
result = [tuple(s[s.find("-") + 1:].split("_")) for s in strings]
return result下面是测试字符串的输出:
[('emp-001', 'id-01', 'sc-01'),
('emp-002', 'id-02', 'sc-12'),
('emp-003', 'id-03', 'sc-10')]发布于 2018-11-20 14:08:46
试试这个:
import re
strings = ["humanresourc-emp-001_id-01_sc-01","itoperation-emp-002_id-02_sc-12","Generalsection-emp-003_id-03_sc-10"]
new_list = []
pattern = '[a-zA-Z]+?[-]{1}(?P<empid>emp-[0-9]{3})_(?P<desid>id-[0-9]{2})_(?P<sclid>sc-[0-9]{2})'
for test_string in strings:
m = re.search(pattern, test_string)
new_tuple = tuple([m.group('empid'), m.group('desid'), m.group('sclid')])
new_list.append(new_tuple)不确定这是否得到了您想要的结果,但是regex模式对所提供的数据有效。
这是我的输出:
[('emp-001', 'id-01', 'sc-01'), ('emp-002', 'id-02', 'sc-12'), ('emp-003', 'id-03', 'sc-10')]https://datascience.stackexchange.com/questions/41459
复制相似问题